【发布时间】:2014-04-14 11:25:58
【问题描述】:
从 iOS 7 开始,UITextView 不会在用户键入换行的文本时自动滚动到光标处。这个问题在 SO 和其他地方都有很好的记录。对我来说,这个问题在 iOS 7.1 中仍然存在。我做错了什么?
我安装了 Xcode 5.1 并针对 iOS 7.1。我正在使用自动布局。
这是我如何将文本视图的内容定位在键盘上方:
- (void)keyboardUp:(NSNotification *)notification
{
NSDictionary *info = [notification userInfo];
CGRect keyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardRect = [self.view convertRect:keyboardRect fromView:nil];
UIEdgeInsets contentInset = self.textView.contentInset;
contentInset.bottom = keyboardRect.size.height;
self.textView.contentInset = contentInset;
}
我尝试过的:我已经尝试了许多针对此问题发布到 SO 的解决方案,因为它与 iOS 7 相关。我尝试过的所有解决方案都没有 strong> 对于显示属性字符串的文本视图似乎很有效。在以下三个步骤中,我概述了 SO (https://stackoverflow.com/a/19277383/1239263) 上投票最多的答案如何响应用户第一次点击返回键。
(1.) 文本视图成为viewDidLoad 中的第一响应者。滚动到光标所在文本视图的底部。
(2.) 在输入单个字符之前,点击键盘上的返回键。插入符号消失在视线之外。
(3.) 然而,再次点击返回键似乎使情况正常化。 (注意:删除后一个新行会使插入符号再次消失)。
【问题讨论】:
-
还应该注意的是,升级到 iOS 7.1 后,这个滚动问题仍然存在于 Apple 的日历应用程序中。创建一个新事件,向下滚动到“备注”部分,反复按回车键直到光标消失。
-
你没有做错什么。这是一个错误。
-
@matt 但是有很多关于这个问题的错误报告提交给苹果。也许不应该设置由 Text Kit 支持的文本视图的 contentInset。如果我避免设置 contentInset,则所谓的错误大多会消失。
-
@bilobatum 查看 peter steinburgers 的帖子,这正是他用很好的解释解决的问题 - petersteinberger.com/blog/2014/fixing-uitextview-on-ios-7
-
该问题在 iOS 8 上已修复。
标签: ios ios7 uitextview ios7.1