我需要一个按钮以纵向安装,而另一个按钮以纵向(任意宽度、任意高度)卸载,而相反的情况应该发生在横向(任意宽度、紧凑高度)。其中一个按钮是 UIStackView
的一部分,另一个是 UIView
的一部分。
在纵向模式下,应该安装 UIStackView
中的按钮,但应该卸载 UIView
中的按钮,正如我之前在横向模式中提到的那样。目前我正在检查 Storyboard的 View Controller 中的 userInterfaceIdiom
,但如果可能的话我想完全依赖 Interface Builder
。
当删除我的代码(这实际上使它的行为正确),并简单地依靠 Interface Builder
来安装/卸载基于 size class
的按钮时,安装的按钮对于横向总是正确布局,但是当旋转回纵向时,现在应该安装的另一个按钮完全放错了位置,在它原来的 UIStackView
之外,那个 UIStackView
它应该保留但没有保留的内容现在已扩展以填充该按钮本应存在的缺失空间。发生这种情况时,日志中没有来自 UIKit
的警告或错误,我的 Storyboard也没有显示冲突。我完全被难住了!
乍一看,这似乎是一个简单的解决方案。只需选中/取消选中 UI 元素的 size classes
安装框。虽然,即使在阅读了 Apple 文档和教程之后,事实证明这比我预期的要困难和晦涩。
澄清一下,我没有为纵向安装的按钮设置约束,因为它位于 UIStackView
内。另一方面,我确实为横向按钮设置了一些限制条件。虽然,UIStackView
中的按钮是唯一给我带来麻烦的按钮。
View 调试器在 Xcode 7 中也不工作,我收到错误:警告:无法从 dyld 共享缓存加载任何 Objective-C 类信息。这将显着降低可用类型信息的质量。
在尝试使用它时。
我相信这可能是一个错误并且与这篇文章相关:UIStackView properties according to size classes
非常感谢您的帮助!谢谢。
最佳答案
如果你想让一个组件只出现在一个特定的尺寸类中,你可以这样做:
使用您希望它出现的尺寸类向您的组件添加约束(wCompact hRegular 适用于所有竖屏 iPhone,wAny hCompact 适用于所有横屏 iPhone)。接下来确保在属性检查器中只勾选了那个尺寸类。
勾选Installed 将使该组件出现在任何尺寸类别中。您可以通过单击屏幕底部中央的选项来更改 Storyboard文件中 View Controller 的大小类(请参阅屏幕底部的蓝色栏,其中显示 wAny hCompact在上图中)。
希望对您有所帮助!
更新
确保组件的约束也设置为正确的尺寸等级。
从文档大纲中选择组件的约束并在尺寸检查器中检查约束的尺寸等级。通常,当您向 Storyboard中选择了特定尺寸等级的组件添加约束时,会自动为该尺寸等级添加约束。
关于ios - 如何根据大小类安装和卸载 UIButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37861501/