【问题标题】:Strange UIScrollView behaviour [closed]奇怪的 UIScrollView 行为
【发布时间】:2016-08-04 03:10:23
【问题描述】:

因为这个问题很难描述,所以我为一个简单的 Xcode 项目 here 创建了一个 GitHub 存储库来演示这个问题。

简而言之,我在UIScrollView 中有一个注册表单,在某些情况下,它会使视图半无响应(即按钮操作未触发)。重现的步骤是手动选择每个UITextField 并按键盘上的“完成”按钮以将其关闭到最后一个字段。这个用户输入序列似乎是重现行为的唯一方法。

我已经设法解决了这个问题,方法是重置滚动视图的内容偏移量以响应keyboardWillHide 通知,但这会导致滚动位置出现明显的跳跃。

有人对这里发生的事情有任何想法吗?我已经花了 2 天时间对此进行调查,但我完全不知道发生了什么。非常感谢您的帮助!

【问题讨论】:

  • 不相关,但您不需要在 switch 的每个 case 的末尾添加 break。这是 Swift,不是 C。
  • @matt Lol 公平点 :)
  • 我无法重现该问题。你能给出更好的指示吗?
  • @matt 我已经更新了 GitHub 上的说明,希望现在更清楚一点。
  • 无法重现任何问题。请参阅下面的答案(并观看我的 YouTube 视频)。一切正常。

标签: ios swift xcode uiscrollview


【解决方案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可以自动解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    相关资源
    最近更新 更多