如何根据大小类安装和卸载UIButton?

时间:2016-06-16 14:02:26

标签: ios swift uibutton interface-builder size-classes

我需要一个按钮以纵向安装,而另一个按钮以纵向(任何宽度,任何高度)卸载,而反向应以横向(任何宽度,紧凑高度)进行。其中一个按钮是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

非常感谢您的帮助!感谢。

1 个答案:

答案 0 :(得分:0)

如果您希望某个组件只显示在特定的大小类中,那就是您所做的:

Compact x Regular

使用您希望它出现的大小类将约束添加到您的组件(wCompact hRegular适用于所有iPhone的纵向和wAny hCompact适用于横向中的所有iPhone)。接下来,确保在Attribute Inspector中仅勾选该大小类。

enter image description here

选中已安装会使组件显示在任何大小的类中。您可以通过单击屏幕中央底部的选项来更改故事板文件中视图控制器的大小类(请参阅屏幕底部的蓝色栏,其中显示 wAny hCompact 在上图中。)

我希望这有帮助!

更新

确保组件的约束也设置为正确的大小类。

Constraint size classes

从Document Outline中选择组件的约束,并在Size Inspector中检查约束的size类。通常,当您在故事板中选择了特定大小类的组件添加约束时,将自动为该大小类添加约束。