2016-07-20 14 views
1

私はUITextViewをStoryboard View ControllerのAutolayout ONに持っています。私はUITextViewのテキストに従って、その高さを動的に増やしたいと思います。サイズを増やすことはできますが、テキストの下に余分なスペースがあります。この余分なスペースを削除するにはどうしたらいいですか?iOSはUITextViewコンテンツの下の余分なスペースを削除します

私はこれらのコード行を試してみました:

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

ここ_descriptionTextUITextViewあると_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が展開されます。何を探していますか?長いtexte-> show短いtexteを追加してから、何かアクションや何かを表示すると、すべてのtexteが表示されますか?それは? – NSSakly

+0

文字列の動的な高さを探している場合は、textViewで文字列を更新した後に呼び出すだけです。 – 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

関連する問題