当放大UIScrollView时,我遇到了一个奇怪的问题。
我们在这个UIScrollView中在iPad上显示用户创建的表单,因此字段可以有不同的大小。定位似乎处理得很好,可以向上移动字段(通过在键盘出现时添加内容偏移量),但点击字段的行为似乎也在进行某种定位。
我的问题是 - 如果用户放大到字段宽于视图的点,点击字段(即使键盘已经可见)也会将视图一直滚动到正确,尽管是从左到右的文本输入,但字段中还没有文字。这会将屏幕左侧(用户期望键入的位置)推到屏幕左侧。
注意 - 如上所述,如果键盘已经可见并且用户已在编辑该字段,也会发生这种情况。再次点击该字段(以显示删除/复制/粘贴等)也会将滚动视图推到右侧,从而切断该字段的第一部分。
理想的解决方案是将此代码滚动以使插入位置在屏幕上可见,但找不到与此问题相关的任何内容或任何其他人在SO或Google上看到它的证据。
答案 0 :(得分:1)
您可以通过添加符号断点来找到问题:
[UIScrollView setContentOffset:animated:]
再次运行您的应用并在错误发生之前启用断点。
当你触发断点时,你可以看到这样的线程痕迹:
问题是当UITextField调用becomeFirstResponder
时,如果它包含在UIScrollView中,它还会在Scrollview中使用textfield的frame rect调用[UIScrollView scrollRectToVisible:animated:]
。
如果您在Scrollview中使用textfield的frame rect调用[UIScrollView scrollRectToVisible:animated:]
,则可以重新创建此错误。
要解决此问题,您可以继承UIScrollView,并更改[UIScrollView scrollRectToVisible:animated:]
的行为以显示rect的左侧,或者如果rect等于其子类之一,则不要滚动(也是UITextField)的框架。