我有一个UITextView,可让用户输入多行文本。当文本超过TextView的大小时,它需要开始滚动。
当弹出屏幕键盘时,我将键盘的高度设置为TextView的bottom-contentInset,以减轻键盘与TextView重叠的问题。但是,当contentInset大于TextView框架的高度时,尝试输入文本时其内容开始跳跃。文本输入插入符跳出视野,每次击键时,整个文本内容都会上下跳动,从根本上使文本输入成为不可能。
无需任何代码即可复制,因此这不是代码错误,而是组件行为问题:
只要触摸UITextView以使其专注于开始键入,一切都会跳起,并且文本输入光标/插入符号移出视野并开始不规律地跳动。
我在做错什么,或者如何避免这种情况?
答案 0 :(得分:1)
回答我自己的问题:
Apple的文档建议使用contentInset
属性,以防止键盘与UI的关键部分重叠。但是,正如我在上面发现的那样,这不适用于UITextViews ...
您应该使用textContainerInset
属性!这符合预期。
- (void)keyboardWasShown:(NSNotification*)aNotification {
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake( 0, 0, kbSize.height, 0 );
textView.textContainerInset = contentInsets;
textView.scrollIndicatorInsets = contentInsets;
}
- (void)keyboardWillBeHidden:(NSNotification*)aNotification {
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
textView.textContainerInset = contentInsets;
textView.scrollIndicatorInsets = contentInsets;
}