2016-07-20 15 views
1

Ich habe eine UITextView mit Autolayout ON innerhalb Storyboard-Ansicht-Controller. Ich möchte seine Höhe dynamisch nach dem Text der UITextView erhöhen. Ich bin in der Lage, seine Größe zu erhöhen, aber es gibt zusätzlichen Platz unter dem Text. Wie kann ich diesen zusätzlichen Speicherplatz entfernen?iOS entfernen zusätzlichen Speicherplatz unter UITextView Inhalt

habe ich versucht, diese Zeilen Code:

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

Hier _descriptionText ist ein UITextView und _descriptionTextHeight ist eine Höhenbeschränkung, die ich die UITextView, um die Größe bin mit.

Ich habe auch versucht, diese Zeilen Code:

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

ich in der Lage war, diesen zusätzlichen Platz zu entfernen, aber UITextView zunehmende Größe nicht. Ein weiterer Punkt, den ich hier hinzufügen möchte, ich möchte Scroll nicht aktivieren.

enter image description here

+0

Danke für den Vorschlag matt. Ich kann subtrahieren, es funktioniert aber das Problem ist Text wird nicht behoben werden. Es vergrößert diesen unteren Bereich entsprechend dem Inhalt. Angenommen, es gibt 10 Textzeilen, dann wird mehr Platz sein. Subtrahieren mit konstantem Wert wird also nicht helfen. –

Antwort

0

dies versuchen, müssen Sie arbeiten.

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

Es half, zusätzlichen unteren Speicherplatz zu entfernen, aber UITextView wird nicht erweitert. –

+0

Was Sie erklären, ist Beschreibung und Titel ist über: iOS entfernen zusätzlichen Speicherplatz unter UITextView Inhalt beim Laden neuer Zeichenfolge, rufen Sie diese Methode und es wird neue Text erweitert angezeigt. Was suchen Sie genau ? lange texte hinzufügen-> kurze texte daraus zeigen und dann wenn aktion oder sowas zeigt man alle texte? ist das ? – NSSakly

+0

Wenn Sie nach dynamischer Höhe für Ihre Zeichenfolge suchen, rufen Sie sie einfach auf, nachdem Sie Ihre Zeichenfolge in der textView aktualisiert haben. – NSSakly

0

Ich weiß nicht, warum Sie Schwierigkeiten damit haben. Der folgende Code funktioniert für mich:

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

eine Unterklasse von UITextView Erstellen und fügen Sie diesen Code:

- (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); 
    } 
} 

Sie werden auch diese Eigenschaften erstellen müssen. Diese steuern die Höhe der Textansicht und legen Grenzen dafür fest, wie kurz und wie groß sie sein kann.

/** 
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; 

Fügen Sie die Textansicht wie gewohnt zu Ihrer Ansicht Hierarchie, eine Einschränkung für die Textansicht Höhe erstellen, und seine minimalen und maximalen Höheneigenschaften eingestellt und Sie sind alle gesetzt.

+0

Funktioniert es, wenn das Scrollen deaktiviert ist? –

+0

@Tech Immortal: Soll die Textansicht editierbar sein? Wenn Sie nur Text anzeigen möchten und ihn nicht bearbeiten möchten, lassen Sie ihn scrollbar, legen Sie jedoch 'userInteractionEnabled = NO 'fest. – jp2g

Verwandte Themen