奇怪的 UIScrollView 行为
Posted
技术标签:
【中文标题】奇怪的 UIScrollView 行为【英文标题】:Strange UIScrollView behaviour [closed] 【发布时间】:2016-08-04 03:10:23 【问题描述】:因为这个问题很难描述,所以我为一个简单的 Xcode 项目 here 创建了一个 GitHub 存储库来演示这个问题。
简而言之,我在UIScrollView
中有一个注册表单,在某些情况下,它会使视图半无响应(即按钮操作未触发)。重现的步骤是手动选择每个UITextField
并按键盘上的“完成”按钮以将其关闭到最后一个字段。这个用户输入序列似乎是重现行为的唯一方法。
我已经设法解决了这个问题,方法是重置滚动视图的内容偏移量以响应keyboardWillHide
通知,但这会导致滚动位置出现明显的跳跃。
有人对这里发生的事情有任何想法吗?我已经花了 2 天时间对此进行调查,但我完全不知道发生了什么。非常感谢您的帮助!
【问题讨论】:
不相关,但您不需要在switch
的每个 case
的末尾添加 break
。这是 Swift,不是 C。
@matt Lol 公平点 :)
我无法重现该问题。你能给出更好的指示吗?
@matt 我已经更新了 GitHub 上的说明,希望现在更清楚一点。
无法重现任何问题。请参阅下面的答案(并观看我的 YouTube 视频)。一切正常。
【参考方案1】:
我建议如下:
摆脱“中心滚动视图”的东西。这是错误的。如果您想将内容垂直居中,请将其放在内容视图中并使用自动布局。
检测 UIKeyboardWillShowNotification,而不是 WillChange。
摆脱你的“让它发挥作用的黑客”。
【讨论】:
我已经发布了一个 YouTube 视频,显示当我进行这些更改时它对我来说效果很好:youtu.be/ZQqJ6-PfR6k 我也遵循了您的新说明,但我仍然无法重现问题。注册按钮仍然有效。 啊,我明白你的意思了。是的,按钮仍然响应,但它没有触发动作。点击后控制台中应该有一个打印语句。此外,文本字段变得无响应。 打印语句确实出现了。并且文本字段不会变得无响应。真的。我需要重新制作视频来证明给你看吗? 制作另一个视频youtu.be/9zkPwkNlTtc 没问题。真的。今天就到这里,睡觉吧。【参考方案2】:您的视图无响应的原因是内容大小设置不正确。设置您放在滚动视图中的background color of view
。同时设置background color of scrollview
。你会明白的,一些文本字段是out of contentsize
区域。这就是它变得没有响应的原因。
如果您仍然遇到此问题,请告诉我。它会解决你的问题:-)
编辑
这里有你想要的工作代码:-)
https://www.sendspace.com/file/k5v9uy
【讨论】:
您的登录和注册按钮位于 contentsize 区域下方。 您在什么尺寸的屏幕上进行测试?我使用的是 iPhone 6,我觉得还不错? 我说的是一般。你能告诉我你的故事板吗?我可以指导你做错了什么。 谢谢!我的问题中有一个项目链接 哦..我明白了。让我检查一下。【参考方案3】:只要UITextField
成为第一响应者,UIKeyboardWillHideNotification
就会调用。所以计算UITextFieldDelegate
中的内容偏移量会非常困难。您可能认为键盘始终存在,但当您更改响应者时,它会发生变化。 UITableViewController
可以自动解决你的问题。
【讨论】:
以上是关于奇怪的 UIScrollView 行为的主要内容,如果未能解决你的问题,请参考以下文章