【问题标题】:iOS Custom Keyboard Height Launching GlitchiOS 自定义键盘高度启动故障
【发布时间】:2020-08-18 04:47:34
【问题描述】:

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

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

我附上了两张启动时和启动后的图片:

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
        }
    }
}

【问题讨论】:

    标签: ios swift autolayout nslayoutconstraint custom-keyboard


    【解决方案1】:

    没有看到你的代码很难说。

    如果我理解正确的话:

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

    这可能有两个原因:

    1) 在首次启动时设置高度限制时,您设置的值与您在后续启动时看到的值不同。验证您在首次启动时为高度约束设置的值是否与您在后续启动时设置的值以及高度约束在后续启动时有效的值相同。您可以通过检查布局和/或记录高度约束值来做到这一点。

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

    一般方法:

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

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

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

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

    【讨论】:

    • 所以有趣的是这不会发生在 iPhone 8/8plus/SE 上。即使有一个没有约束的空 xib 文件或它做的任何事情。我还从应用商店下载了其他自定义键盘并注意到了同样的事情。我认为这是 Apple 问题而不是代码问题?
    • 这种情况是只发生在模拟器上还是真机上?
    • 模拟器和真机。我发现添加到 xib 文件的次数越多,加载速度就越慢。即使只有一个按钮,它也会出现故障,但会快速重新定位。当我完成添加按钮时,键盘需要更长的时间才能到达正确的位置。理想情况下,我希望它加载到正确的位置。
    • 你检查默认键盘高度的值了吗?值错布局正确还是值正确布局错误?
    • 请再看看我的回答,我在那里扩展了解释。我想再次指出,根据社区指南,您的问题应包含问题核心的代码。这会让其他人更容易给你一个有用的答案。
    猜你喜欢
    • 2017-01-30
    • 2014-12-11
    • 2014-12-18
    • 2019-08-23
    • 1970-01-01
    • 2014-07-02
    • 2017-04-20
    • 2018-05-24
    • 2015-04-18
    相关资源
    最近更新 更多