代码之家  ›  专栏  ›  技术社区  ›  Craig

UITextView在键入一段时间后消失在键盘后面

  •  0
  • Craig  · 技术社区  · 6 年前

    我有一个 UITextView 它占据了整个视图,占据了整个屏幕。我注册接收 UIKeyboardWillShowNotification UIKeyboardWillHideNotification . 我很好地处理了这些问题,并调整了UITextView的高度,使其位于键盘上方:

    - (void) keyboardWillShow:(NSNotification *)aNotification 
        {
        CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        CGRect bounds = self.view.bounds;
        bounds.size.height = bounds.size.height - keyboardRect.size.height;
        self.textView.frame = bounds;
        }
    

    再说一次,这很有效。现在我打几行。有一段时间,当我添加更多的文本行时,文本的底线会自动保持在键盘上方。但最终,通常只有几行(也许4-5行),下一行会在键盘下,我可以继续在键盘下打字。最后,当我用键盘后面的线条敲击屏幕底部时,键盘上方仍能看到的线条将开始向上滚动。

    我不明白 UIKeyboardWillHideNotification 在这个过程中,但它的行为几乎和我一样——也就是说,我身体的大小 UITextView视图

    所有这些在iOS11中都可以正常工作。也就是说,当我打字时,文本会向上滚动,这样文本的底线就不会落在键盘后面。只是iOS9。有人记得当年的一个已知问题,还有一个解决方法吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   R4N    6 年前

    我最好的猜测是,你正在混合自动布局和自动调整大小,它似乎是挑选 一个在以后的iOS中,但不是在iOS 9中。

    AutoResizing+AutoLayout_iOS9

    如果我使用纯自动布局方法(例如,在keyboardWillShow中通过编程调整textView的底部约束的常量),那么它会在ios9上产生正确的行为(没有setFrame调用):

    Pure_AutoLayout_iOS9

    @property (strong, nullable) IBOutlet NSLayoutConstraint *textViewBottomConstraint;
    
    ...
    
    - (void)keyboardWillShow:(NSNotification *)aNotification {
        CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        self.textViewBottomConstraint.constant = -keyboardRect.size.height;
    }