2016-07-20 2 views
1

У меня есть UITextView с функцией Autolayout ON внутри контроллера раскадровки. Я хочу динамически увеличить ее высоту в соответствии с текстом UITextView. Я могу увеличить его размер, но есть дополнительное пространство ниже текста. Как я могу удалить лишнее пространство?iOS удалить дополнительное пространство под содержимым UITextView

Я пробовал эти строки кода:

[_descriptionText setText:string]; 
CGSize sizeThatFitsTextView = [_descriptionText sizeThatFits:CGSizeMake(_descriptionText.frame.size.width, MAXFLOAT)] 
_descriptionTextHeight.constant = sizeThatFitsTextView.height; 

Здесь _descriptionText является UITextView и _descriptionTextHeight является ограничение высоты, которые я использую, чтобы изменить размер UITextView.

Я также попытался следующие строки кода:

[_descriptionText setText:string]; 
_descriptionTextHeight.constant = [_descriptionText intrinsicContentSize].height; 

я был в состоянии удалить это дополнительное пространство, но размер UITextView не увеличивается. Еще один пункт, который я хочу добавить здесь, я не хочу включать прокрутку.

enter image description here

+0

Благодарим за предложение матового. Я могу вычесть, его работа, но проблема в тексте не будет исправлена. Он увеличивает это нижнее пространство в соответствии с содержимым. Предположим, что если есть 10 строк текста, тогда будет больше места. Поэтому вычитание с постоянным значением не поможет. –

ответ

0

попробовать это, должно работать для вас.

CGSize sizeThatFitsTextView = [txt sizeThatFits:CGSizeMake(txt.frame.size.width, MAXFLOAT)]; 

_descriptionText.contentOffset = CGPointZero; 
_descriptionText.contentInset = UIEdgeInsetsMake(-6,0,0,0); 
[txt layoutIfNeeded]; //added 

NSLayoutConstraint *heightConstraint; 
for (NSLayoutConstraint *constraint in _descriptionText.constraints) { 
    if (constraint.firstAttribute == NSLayoutAttributeHeight) { 
     heightConstraint = constraint; 
     break; 
    } 
} 
heightConstraint.constant = sizeThatFitsTextView.height-12; 


[_descriptionText layoutIfNeeded]; 
+0

Это помогло удалить дополнительное пространство, но UITextView не расширяется. –

+0

Что вы объясняете, это описание и название: iOS удаляет лишнее пространство ниже содержимого UITextView при загрузке новой строки, вызывается этот метод, и он будет показывать новый texte. Что вы ищете точно? добавив long texte-> show short texte из него, а затем, когда действие или что-то вы покажете всем texte? в том, что ? – NSSakly

+0

, если вы ищете динамическую высоту для своей строки, просто вызовите ее после обновления строки в текстовом элементе. – NSSakly

0

Я не знаю, почему у вас возникают трудности с этим. Следующий код работает для меня:

func adjustHeight(_ tv:UITextView) { 
    self.heightConstraint.constant = ceil(tv.contentSize.height) 
} 

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    self.adjustHeight(textView) 
    return true 
} 
0

Создайте подкласс UITextView и добавить этот код:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // Layout subviews gets called when the text view's text changes in a way that might 
    // require scrolling. We get its new intrinsic size and update the height constraint 
    // to grow the text view. 
    CGSize intrinsicSize = self.intrinsicContentSize; 
    self.heightConstraint.constant = MAX(intrinsicSize.height, self.minimumHeight); 

    // The text view has a tendency to scroll up once it's full, but before the 
    // height constraint that increases its height takes effect. This results 
    // in a blank area at the bottom, with the first line pushed out of view. 
    // We cancel the scroll action, but only if it has not reached its maximum height. 
    if (intrinsicSize.height < self.maximumHeight) { 
     self.contentOffset = CGPointMake(0, 0); 
    } 
} 

Вам также нужно создать эти свойства. Они контролируют высоту текстового вида и устанавливают ограничения на то, насколько короткими и насколько высоки они могут получить.

/** 
The height constraint for the text view installed in the text view's superview. 
*/ 
@property (weak,nonatomic) NSLayoutConstraint *heightConstraint; 

/** 
The text view's minimum height. 
*/ 
@property (nonatomic) CGFloat minimumHeight; 

/** 
The text view's maximum height. 
*/ 
@property (nonatomic) CGFloat maximumHeight; 

Добавить представление текста в иерархии представления, как обычно, создают ограничения для высоты Вид текста, и установить его минимальная и максимальная высота свойства и вы все сделали.

+0

Будет ли это работать, когда прокрутка отключена? –

+0

@Tech Immortal: вам нужно, чтобы текст был доступен для редактирования? Если вы хотите, чтобы он отображал текст и не нуждался в его редактировании, оставьте его прокручиваемым, но установите 'userInteractionEnabled = NO'. – jp2g