2016-09-03 10 views
0

Я использую следующий код, чтобы динамически регулировать высоту containerView, который содержит мой UITextViewUITextView Изменение размера Динамически

func textViewDidChange(textView: UITextView) { 
    let amountOfLinesToBeShown:CGFloat = 6 
    let maxHeight:CGFloat = textView.font!.lineHeight * amountOfLinesToBeShown 

    if ((textView.contentSize.height/textView.font!.lineHeight) < 6) { 
     topConstraint?.constant = -textView.sizeThatFits(CGSizeMake(textView.frame.size.width, maxHeight)).height - keyboardFrameSize!.height 

     containerView.layoutIfNeeded() 
     containerView.updateConstraints() 
    } 
} 

Проблема, когда я печатаю, это будет выглядеть так: enter image description here

и желаемый эффект заключается в следующем:

enter image description here

ответ

0

Создайте функцию и добавить в методе viewDidLoad, попробуйте:

self.addSubview(containerView) 
containerView.addSubview(textView) 

containerView.bottomAnchor.constraintEqualToAnchor(self.bottomAnchor).active=true 
containerView.leftAnchor.constraintEqualToAnchor(self.leftAnchor).active=true 

textView.topAnchor.constraintEqualToAnchor(containerView.topAnchor, constant: 3).active=true 
textView.leftAnchor.constraintEqualToAnchor(containerView.leftAnchor, constant: 3).active=true 
textView.widthAnchor.constraintEqualToAnchor(containerView.widthAnchor).active=true 
textView.heightAnchor.constraintEqualToAnchor(containerView.heightAnchor).active=true 
+0

Должен ли я делать это в дополнение к моему коду или вместо кода? Имейте в виду, что высота 'UITextView' должна динамически меняться, когда я печатаю, не устанавливал бы якорь высоты на 30, чтобы предотвратить это? – Alk

+0

Вы можете установить heightAnchor как containerView.heightAnchor. – Carlo

+0

Я обновил ответ – Carlo

0

использования TextView метод textContainerInset для достижения того, что и хотят

//insets are top, left, bottom, top.. 
tv.textContainerInset = UIEdgeInsetsMake(0,0,0,0); 

после установки этого метода, когда начинается TextView линии, увеличить высоту текстового поля для поиска текстового поля следующей строки,

способ использования: - TextViewDidChange

0

Ответ на этот пост решает эту проблему. How do I size a UITextView to its content?

ниже код не мой, он от ответа, связанного выше (просто размещение для удобства другого):

let fixedWidth = textView.frame.size.width 
textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height:CGFloat.max)) 
var newFrame = textView.frame 
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
textView.frame = newFrame; 
1

Приведенный ниже код может быть решение этой проблемы вы получили.

func textViewDidChange(textView: UITextView) { 
     var newFrame = textView.frame 
     var minHeight = 40 // ENTER THE MIN HEIGHT OR THE INITIAL HEIGHT OF THE TEXTVIEW 
     var maxHeight = 100 // ENTER THE MAX HEIGHT YOU WANT 
     newFrame.size = textView.sizeThatFits(CGSizeMake(newFrame.size.width, maxHeight)) 

    if newFrame.size.height > minHeight && newFrame.size.height < maxHeight { 
     // Change the origin.y value which is 10 to your desired margin for top. 
     textView.frame = CGRectMake(0, 10, textView.frame.size.width, newFrame.size.height) 
    } 
}