iOS: 自動增高的 textView


如 iPhone 內應用“信息”的輸入框一樣,輸入文字過多或者輸入換行,輸入框可以隨着內容自動變化。主要是計算內容的尺寸並相應更改輸入框的frame。具體表現在:

  1. 更改輸入框的 frame.origin.y;
  2. 更改輸入框的高度。

兩者的變化量是相同的。

為了能達到實時性,就要監聽文字的變化,注冊 UITextViewTextDidChangeNotification 的監聽,並在合適的時候解除監聽。

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChanged:) name:UITextViewTextDidChangeNotification object:nil];
}

- (void)removeFromSuperview
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:nil];
}

在監聽的方法中,更改 textView 的frame

- (void)textDidChanged:(NSNotification *)notif
{
    CGSize contentSize = self.textView.contentSize;
    if (contentSize.height > 140) {
        return;
    }
    CGFloat minus = 3;
    
    CGRect selfFrame = self.frame;
    CGFloat selfHeight = self.textView.superview.frame.origin.y * 2 + contentSize.height - minus + 2 * 2;
    CGFloat selfOriginY = selfFrame.origin.y - (selfHeight - selfFrame.size.height);
    selfFrame.origin.y = selfOriginY;
    selfFrame.size.height = selfHeight;
    self.frame = selfFrame;
}

在本例中,textView 是 self (UIView) 的 subView,並且設置好了 UIViewAutoresizingMask,所以更改 self.frame,變相地更改 textView.frame。

    aTextView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM