在我的自定义键盘中,我在updateConstraints中添加了一个约束,该约束增加了键盘的高度。 这将导致子视图调整(也使用“自动布局”)为新大小。 当布局完成调整其大小并且所有子视图都已定位后,我需要调用一个函数(以存储稍后要使用的一些新元素的位置,并响应此新布局手动更新某些元素)。 当尺寸改变并且元素重新定位时,例如在旋转设备之后,需要再次触发该代码。 我应该使用什么功能来运行该代码?

viewDidAppear仅被调用一次,这还为时过早,因为当时键盘的大小尚未调整。

updateViewConstraints不起作用,因为尚未针对更新的约束updateViewConstraints视图进行布局。 我试着打电话self.view.setNeedsLayout()然后self.view.layoutIfNeeded()企图迫使更新打电话给我的函数之前进行,但这并没有发挥作用-它仍然运行功能键盘完成之前布置子视图。

我尝试过viewDidLayoutSubviews ,虽然它在视图建立之后被调用,但问题是在键盘上滚动集合视图时,该函数被调用了百万次。 滚动时无法调用该函数,只能在键盘大小改变并且视图固定到位后一次调用它。

我考虑过在延迟后在viewDidAppear调用它,然后又在另一个延迟后在诸如viewWillTransitionToSize的旋转方法中调用它,但这将非常脆弱。 我可以增加延迟以减少它的脆弱性,但我想确保尽早调用此方法,以确保尽快更新所有内容。

===============>>#1 票数:0

根据我在iOS 8.3之前的版本中解决此问题的经验,这没有灵丹妙药。 我不确定您对所做的事情有什么确切的要求,但是我尝试了以下几种可能的解决方案,也许它们会对您有所帮助:

第一; 假设您的键盘最终将更新为您的“所需”大小,并根据viewDidLayoutSubviews布局进行布局。 您进行一次布局调整大小,然后再也不进行调整,除非您检测到方向已更改。 这样做的缺点是:a)在更新高度限制之前的时间内,您的键盘只会部分显示在屏幕上; b)在某些情况下,高度限制将不被遵守,并且您会留下变形的键盘(您可以使用计时器解决此问题,但正如您观察到的那样,它非常脆弱),并且c)在iPhone 6/6 +上的“按比例缩放视网膜”应用程序中,很难使其正常工作。

第二; 检测UIInputView的高度UIInputView更改,并将该信息传递给您的集合视图,这样它只会在发生这种情况时重新布局。 以我的经验,这种情况可能只会发生两次,而不是必要的次数。

第三; 检测collectionview何时滚动(您可以从scrollview注册回调),并且在发生这种情况时不要进行昂贵的布局操作。 这也很脆弱。

无论您做什么,都一定要测试一下在按比例缩放视网膜应用程序时发生的情况,当用户在有状态的布局操作发生时输入密码字段时,如果用户在您进行缩放操作时关闭键盘会发生什么情况在执行此操作时,如果用户在释放键盘UI并因此将其回收(通常以动画形式滑动而不是弹出)循环之前关闭用户键盘并重新打开它,会发生什么情况。您可能会得到无效状态,该状态将如果不小心,可能会破坏将来的操作,或者破坏计时器的参考周期和/或强烈引用您的键盘UI。

同样,在存储元素位置的情况下,我不知道您在做什么,但是直接读取这些属性可能比存储它们更好。 状态越多,潜在的问题就越多。

最后的评论-我自己还没有测试过,但是有人报告说第三方键盘中的自动布局速度很慢-您似乎暗示要使用它来布局视图-我会分析一下是否确实是由您的代码引起的问题,我认为这会导致您的键盘弹出时间过长。

我希望这是有帮助的。

  ask by Jordan H translate from so

未解决问题?本站智能推荐:

1回复

UIScreenEdgePanGestureRecognizer在自定义键盘扩展中不起作用

问题 我无法使用UIScreenEdgePanGestureRecognizer识别自定义键盘扩展中屏幕右边缘或左边缘的边缘滑动。 我创建了一个新项目来测试它。 其他UIGestureRecognizer的工作正常,如下所述。 例 在Github上下载我的示例项目
2回复

如何使用自定义键盘扩展ios8的自动建议视图?

如何在我自己的iOS8自定义键盘扩展中实现Apple的预测输入面板? Apple的自定义键盘API Doc 自定义键盘指出: RequestsOpenAccess设置BOOL在info.plist中是访问一个基本的autocorrection通过UILexicon类词汇。 利用
1回复

为iOS自定义键盘添加语言词典以获得预测(暗示)文本

我正在尝试创建自定义iOS键盘。 我使用UILexicon类来提供requestSupplementaryLexiconWithCompletion:方法提供的单词的基本词典。 但我想在键盘上添加Predictive Text 。 我知道即使你尝试使用完全的努力也无法创建单词数据库
2回复

iOS 8键盘扩展 - UIInputViewController无法添加多个视图[关闭]

我认为键盘扩展上的UIInputViewController有一些限制。 第一个问题: 我从不向inputView或view添加子视图,但是当我从nib创建视图实例时,它自动将该视图设置为默认视图。 不正常。 第二个问题: 我在一个XIB文件中有两个独立的视图。
2回复

iOS 8自定义键盘

我正在尝试构建一个自定义键盘,它就像一个表情符号键盘,但键盘的数据来自一个json文件。 在解析了这个json文件并获取数据之后,如何让自定义键盘使用它并在键盘视图中显示,就像内置的表情符号键盘一样? 现在,我按照应用程序扩展键盘:自定义键盘指南,这里只有一小部分信息。 有关于如何在线创建
1回复

键盘扩展:是否可以从库存iOS键盘继承功能和UI?

自定义键盘扩展是iOS 8中一个功能强大的新工具,允许您实现iOS 8键盘库存永远不会有的键盘功能。 不过,库存iOS键盘已经很不错了。 它作为唯一的iOS键盘已经有多年的开发,因此具有人们对键盘所期望的许多(实现成本高昂)功能。 我有兴趣实现几个小键盘功能,但也想保留普通iOS
1回复

iOS 8键盘扩展-能够使用Apple默认键盘模板Xib吗?

我想知道在创建和测试键盘扩展过程中,是否能够使用默认的Apple QWERTY键盘之类的功能来测试功能。 我看到几个教程中显示的推荐步骤是使用自定义XIB添加按钮,但是想知道是否可以使用键盘模板。 没有可用的Apple键盘吗?是否有可用的流行的3rd party /开源键盘模板?
1回复

在自定义键盘扩展中播放标准iOS键盘单击声音

我想知道iOS 8中是否有新的API允许您在键盘扩展中播放标准的键盘点击声 - 只有在启用键盘点击并且设备未处于静音状态时才播放。 我没见过这样的API,我也没有看到任何关于这个的问题。 我知道在以前的iOS版本中,如果您实现了自定义输入或键盘附件视图(通过[[UIDevice curr
1回复

替换自定义键盘中的预测文本源

有没有办法在iOS 8自定义键盘扩展中替换预测文本的来源并在预测文本栏中显示? 预测文本栏的类是什么? 非常感谢。 我已经阅读了文档,但找不到答案。 请帮忙。
4回复

iOS 8中具有本机预测的自定义键盘

目标:使用QuickType(Predictive)为俄语创建自定义键盘,该键盘看起来应该像本地语言(由于声誉不高而无法发布图片,但我想很清楚,我很清楚),并进行了一些更改:自己的算法来显示单词; 用户可以从3个以上的选项中进行选择 我发现标准功能无法做到这一点(例如“将诸如quickT