我尝试针对纵向和横向方向以不同的方式布局用户界面。区别在于以下几种方式:
我只有几个UIStackViews。他们的某些轴在横向上变为水平,而在纵向模式下变为垂直,
在两种模式下,UIStackView中按钮的顺序可能不同,
需要删除横向中添加到subview1的按钮,并将其添加到横向中的subview2。 subview1在纵向模式下可能根本不存在
自动布局约束在两种模式下都不同。
我从XCode的特征开始,但它似乎有局限性。我正在手动切换代码中关于观察特征集合更改的约束(viewWillTransition:...),但看起来笨拙。是否有更好的方法或最好的方法是对这两种模式都有重复的控件集并隐藏横向/人像模式中不需要的控件?
答案 0 :(得分:2)
如果正确使用它,界面构建器确实非常强大,我不确定要尝试做什么,如果至少共享一些屏幕截图,它将很有用。我假设您在mp4
的每个子视图中都是一个按钮,或者它包含一个按钮,在这种情况下,我要做的是:
具有2个不同的UIStackView
,一个用于风景,另一个用于肖像。
将变体添加到特征的UIStackView
接口构建器属性中。因此,一次只能安装两个installed
中的一个。
对于每个添加UIStackView
的事件,请将其分别连接到UIButton
或IBAction
。即使有2个按钮执行相同操作,此操作也将起作用。
关于您的问题:
selector
本身不会更改,但这将起作用,因为axis
有2个版本。UIStackView
上。UIStackView
上的任意位置添加按钮。UIStackView
设置所需的约束。我错过了什么吗?请通过更多信息更新您的问题,以便其他人可以更好地为您提供帮助。
答案 1 :(得分:1)
我所做的就是观察UIDevice.orientationDidChangeNotification
并更新必要的约束以实现不同的布局,就像您已经实现的那样。而且我认为这是解决问题的更好方法,并且永远不要尝试甚至不考虑为每个方向创建不同的视图。
遵守条件:
axis
属性。arrangedSubviews
的顺序是设计的一部分,因此,由开发人员决定是否必须手动重新排列。removeFromSuperview()
按钮和addSubview(view:)
从一个子视图到另一个子视图。最重要的是要确保在删除子视图时,与其相关的任何约束都将被删除,否则应用程序将崩溃。