【发布时间】:2016-10-18 02:34:23
【问题描述】:
我需要一个按钮以纵向安装,而另一个按钮以纵向(任何宽度、任何高度)卸载,而在横向(任何宽度、紧凑高度)中应该发生相反的情况。其中一个按钮是UIStackView 的一部分,另一个是UIView 的一部分。
在纵向时,应安装UIStackView 中的按钮,但应卸载UIView 中的按钮,正如我前面提到的横向时发生的相反。目前我正在查看我的视图控制器中的userInterfaceIdiom 以获取情节提要,但如果可能的话,我想完全依赖Interface Builder。
当删除我的代码(实际上使其行为正确)并仅依靠Interface Builder 来安装/卸载基于size class 的按钮时,为横向安装的按钮总是正确布局,但是当旋转回来时对于纵向,现在应该安装的另一个按钮完全放错了位置,超出了原来的UIStackView,而应该保留但没有保留的UIStackView 现在已扩展以填充缺失的空间按钮应该是。发生这种情况时,日志中没有来自UIKit 的警告或错误,并且我的故事板显示没有冲突。我彻底被难住了!
乍一看,这似乎是一个简单的解决方案。只需选中/取消选中 UI 元素的 size classes 的安装框。虽然,即使在阅读了 Apple 文档和教程之后,事实证明这比我预期的要困难和晦涩。
澄清,我确实没有为纵向安装的按钮设置约束,因为它位于UIStackView 内。另一方面,我确实为横向按钮设置了一些约束。虽然,UIStackView 中的按钮是唯一给我带来麻烦的按钮。
视图调试器在 Xcode 7 中也不起作用,我收到错误消息:warning: could not load any Objective-C class information from the dyld shared cache. This will significantly reduce the quality of type information available. 尝试使用它时。
我认为这可能是一个错误并且与这篇文章有关:UIStackView properties according to size classes
非常感谢您的帮助!谢谢。
【问题讨论】:
-
"当这种情况发生时,日志中没有来自 UIKit 的警告或错误" 但是你有任何自动布局的歧义吗?您不会收到任何警告,但它们可能会导致此类问题。您必须使用日志记录/查看调试来找出答案。
-
@matt 感谢您的快速回复! IB 没有为我的故事板显示基于自动布局的约束和/或框架的任何警告或歧义。你问的是这个吗?
-
不,我说的是运行时发生的事情。
-
@matt 我在运行时也没有收到这些。有什么建议吗?
-
我想说,回到用代码做这件事,然后继续。 IB显然不能做你想做的事。没什么大不了的。
标签: ios swift uibutton interface-builder size-classes