奇怪的 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 行为的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的 UIScrollView 行为

UIView - UIScrollView 奇怪的行为

子类化 UIScrollView 时的奇怪行为

使用 UIScrollView 旋转后出现奇怪的行为

UIScrollView & UIButtons,真的很奇怪的行为

UIScrollView:内部视图不合适,奇怪的行为,视图在触摸时重新恢复