当点击字段时,zoomScaled UIScrollView定位错误

时间:2016-11-17 16:58:35

标签: ios uiscrollview uitextfield

当放大UIScrollView时,我遇到了一个奇怪的问题。

我们在这个UIScrollView中在iPad上显示用户创建的表单,因此字段可以有不同的大小。定位似乎处理得很好,可以向上移动字段(通过在键盘出现时添加内容偏移量),但点击字段的行为似乎也在进行某种定位。

我的问题是 - 如果用户放大到字段宽于视图的点,点击字段(即使键盘已经可见)也会将视图一直滚动到正确,尽管是从左到右的文本输入,但字段中还没有文字。这会将屏幕左侧(用户期望键入的位置)推到屏幕左侧。

注意 - 如上所述,如果键盘已经可见并且用户已在编辑该字段,也会发生这种情况。再次点击该字段(以显示删除/复制/粘贴等)也会将滚动视图推到右侧,从而切断该字段的第一部分。

理想的解决方案是将此代码滚动以使插入位置在屏幕上可见,但找不到与此问题相关的任何内容或任何其他人在SO或Google上看到它的证据。

示例 - Example position

1 个答案:

答案 0 :(得分:1)

您可以通过添加符号断点来找到问题:

  

[UIScrollView setContentOffset:animated:]

enter image description here

enter image description here

再次运行您的应用并在错误发生之前启用断点。

当你触发断点时,你可以看到这样的线程痕迹:

enter image description here

问题是当UITextField调用becomeFirstResponder时,如果它包含在UIScrollView中,它还会在Scrollview中使用textfield的frame rect调用[UIScrollView scrollRectToVisible:animated:]

如果您在Scrollview中使用textfield的frame rect调用[UIScrollView scrollRectToVisible:animated:],则可以重新创建此错误。

要解决此问题,您可以继承UIScrollView,并更改[UIScrollView scrollRectToVisible:animated:]的行为以显示rect的左侧,或者如果rect等于其子类之一,则不要滚动(也是UITextField)的框架。