iOS 自定义键盘高度启动故障

iOS Custom Keyboard Height Launching Glitch

我已经创建了一个自定义键盘,它工作正常。我将高度限制设置为与默认键盘相同。问题是,当键盘首次启动时,它从键盘下方开始,然后将自身定位到正确的高度。

有人知道为什么会这样吗?

我附上了发射时和发射后的两张图片:

At Initial Launch

Once Launched

我正在对视图高度进行硬编码。

override func viewDidLayoutSubviews() {
    if UIScreen.main.bounds.width < UIScreen.main.bounds.height {
        if UIScreen.main.bounds.height == 667 ||
            UIScreen.main.bounds.height == 812 {
                viewHeight.constant = 216
            } else {
                viewHeight.constant = 226
            }
    } else if UIScreen.main.bounds.width > UIScreen.main.bounds.height {
        if (UIScreen.main.bounds.height == 375 && UIScreen.main.bounds.width == 667) || UIScreen.main.bounds.height == 812 || (UIScreen.main.bounds.height == 414 && UIScreen.main.bounds.width == 736) {
            viewHeight.constant = 158
        } else {
            viewHeight.constant = 168
        }
    }
}

如果没有看到您的代码,很难判断。

如果我理解正确的话:

  • 您将高度限制设置为与默认键盘相同
  • 首次启动时键盘显示不正确
  • 在后续启动时,键盘会正确显示

这可能有两个原因:

1) 首次启动时设置高度限制时,您设置的值与您在后续启动时看到的值不同。确认您在首次启动时为高度约束设置的值与您在后续启动时设置的值相同,并且高度约束在后续启动中有效具有的值。您可以通过检查布局 and/or 记录高度约束值来做到这一点。

2) 当你第一次启动时设置的高度约束的值与你在后续启动时设置的值相同且约束有效具有相同的值,但仍然显示不同,则可能是布局问题。确认您在布局过程的正确位置设置了高度约束的值,您正确地通知布局引擎该值已更改并且布局引擎有足够的时间来呈现更改而不会被中断。

一般方法:

  • 消除复杂性,直到您的代码变得如此简单,以便您更有可能解决问题。对于调试,而不是嵌套的 ifs 将高度设置为固定值并查看布局是否仍然在每次启动时发生变化。

  • 试试你在网上找到的其他自定义键盘项目,看看它们是否表现出类似的行为,也许这会给你一个提示。

  • 确保您了解 iOS 自动布局的工作原理并在必要时进行研究。这可能是一个相当复杂的话题。你问题中的代码只说明了这么多,但对于自动布局、视图层次结构和 when/where 你影响代码其他部分的布局过程是重要的方面。没有看到整个视图和代码结构,这个问题很难分析。

  • 尽可能简化您的项目,并在 Github 上提供演示,您可以在此处参考,以便其他人可以重现该问题。