2014-12-03 66 views
2

我知道有一些類似的帖子,但它們似乎不適合我。使用AutoLayout將其展開至指定高度後,重新啓用UITextView滾動

我有一個uitextview,我想表現出類似於消息傳遞的應用程序。

我使用了autolayouts和[textview setScrollEnabled:NO]來允許uitextview在鍵盤上動態擴展。當然,它會長到屏幕的頂端。當它停止增長,你不能看到任何額外的文字。

我試圖找到它在textViewDidChange內停止生長的高度,並調用了[textView setScrollEnabled:YES],但它在縮小之前縮小了初始大小。

我怎樣才能啓用滾動,當它達到一定的高度或不能再長大?

回答

0

這是一個研究和這裏的主角爲您。

  1. 您的文本視圖的子類。

  2. 監視contentSize的變化,可能有一個你可以覆蓋的setter或簡單的KVO可以工作。

  3. 創建文本視圖委託,將ping你的控制器回來更新自動佈局約束。

  4. 當contentSize達到您定義的最大值時,只需簡單地調整該值並讓文本視圖自然滾動即可。

0

當文本視圖達到屏幕頂部所需的距離時,將高度限制添加到文本視圖。我從視圖頂部做過這樣,

-(void)textViewDidChange:(UITextView *)textView { 
    if (textView.scrollEnabled == NO) { 
     if (textView.frame.origin.y < 50) { 
      [textView addConstraint:[NSLayoutConstraint constraintWithItem:textView attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:textView.frame.size.height]]; 
      textView.scrollEnabled = YES; 
     } 
    } 
} 

當文本視圖增長到內50分,它得到高度約束等於其目前的高度。

5

我發現到現在爲止的最佳解決方案是保持滾動啓用並根據其內容大小改變textview的高度。

看起來是這樣的:

- (void)textViewDidChange:(UITextView *)textView 
{ 
    self.consTextViewHeight.constant = MIN(MAX_HEIGHT, textView.contentSize.height + textView.textContainerInset.top); 
} 
+0

當我第一次嘗試這樣做我認爲它沒有工作,因爲文本只是不停地與每一個新的角色朝着更高,然後我意識到我必須重新啓用滾動爲UITextView。完美的作品謝謝你。 – user3344977 2015-07-06 05:30:15

+1

這應該是一個被接受的答案 – 2016-12-06 07:51:42

相關問題