2016-05-30 15 views
5

Ich habe meine UITextView in UIStackView hinzugefügt.UITextview in UIStackView

Aber meine Textansicht ist nicht Multiline.

Auto Layout ist wie folgt:

enter image description here

Wie pro Bild, um es nur 1 Zeile genommen wird. Der Textansichtsrahmen wird als Bild außerhalb des Rahmens angezeigt.

UITextView

enter image description here enter image description here

UIStackView

enter image description here

+0

Also, was ist das Problem? – Lion

+0

@Lion, sollte es mit Multiline angezeigt werden? – user2526811

Antwort

14

Das Problem ist, dass Sie die height von UIStackview behoben haben durch Angabe oben und unten Einschränkungen.

  1. das Scrollen Boden Einschränkung

    enter image description here

deaktivieren Textview löschen.

Machen Sie Ihre Textview Delegaten selbst und implementieren textViewDidChange

Swift

func textViewDidChange(_ textView: UITextView) { 
    view.layoutIfNeeded() 
} 

Objective C:

-(void)textViewDidChange:(UITextView *)textView { 
    [self.view layoutIfNeeded]; 
} 

Stellen Sie sicher, dass diese Methode aufgerufen wird.

Jetzt sollte Ihre Stackview mit Ihrer Textansicht zu Multiline wachsen.

Dann Grund, dass Ihre Textansicht nicht mehrzeilig ist, weil Sie die Höhe festgelegt haben. Also wird es niemals mehrzeilig sein.

Siehe GIF:

enter image description here

+1

Ausgezeichnet! Wenn Sie statischen Text haben, was ich gefunden habe, ist, dass, wenn Sie viewDidLayoutSubviews() überschreiben, Sie dort die Höhe des Inhalts erhalten und die Höhenbeschränkung aktualisieren können. Aber deine Antwort hat mich auf den richtigen Weg gebracht! \t Überschreibung func viewDidLayoutSubviews() { \t \t super.viewDidLayoutSubviews() \t \t textViewHeightConstraint.constant = textView.contentSize.height \t \t textView.layoutIfNeeded() } \t –

0

beste Lösung, die ich für diese bisher gefunden haben, ist die UITextView in einem UIView zu wickeln und dann mit einer Höhe Anker die feste Höhe der UITextView Einstellung.

let textView = UITextView() 
let containerView = UIView() 
textView.translatesAutoresizingMaskIntoConstraints = false 
containerView.addSubview(textView) 

textView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true 
textView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true 
textView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true 
textView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true 

textView.heightAnchor.constraint(equalToConstant: 100).isActive = true 
let stackView = UIStackView(arrangedSubviews: [containerView])