纵向和横向模式iOS的自定义界面

时间:2018-11-20 19:07:06

标签: ios xcode ios-autolayout uistackview landscape-portrait

我尝试针对纵向和横向方向以不同的方式布局用户界面。区别在于以下几种方式:

  1. 我只有几个UIStackViews。他们的某些轴在横向上变为水平,而在纵向模式下变为垂直,

  2. 在两种模式下,UIStackView中按钮的顺序可能不同,

  3. 需要删除横向中添加到subview1的按钮,并将其添加到横向中的subview2。 subview1在纵向模式下可能根本不存在

  4. 自动布局约束在两种模式下都不同。

我从XCode的特征开始,但它似乎有局限性。我正在手动切换代码中关于观察特征集合更改的约束(viewWillTransition:...),但看起来笨拙。是否有更好的方法或最好的方法是对这两种模式都有重复的控件集并隐藏横向/人像模式中不需要的控件?

2 个答案:

答案 0 :(得分:2)

如果正确使用它,界面构建器确实非常强大,我不确定要尝试做什么,如果至少共享一些屏幕截图,它将很有用。我假设您在mp4的每个子视图中都是一个按钮,或者它包含一个按钮,在这种情况下,我要做的是:

具有2个不同的UIStackView,一个用于风景,另一个用于肖像。

将变体添加到特征的UIStackView接口构建器属性中。因此,一次只能安装两个installed中的一个。

对于每个添加UIStackView的事件,请将其分别连接到UIButtonIBAction。即使有2个按钮执行相同操作,此操作也将起作用。

关于您的问题:

  1. selector本身不会更改,但这将起作用,因为axis有2个版本。
  2. 您可以选择将按钮布置在每个UIStackView上。
  3. 只需在每个UIStackView上的任意位置添加按钮。
  4. 根据要使用的UIStackView设置所需的约束。

我错过了什么吗?请通过更多信息更新您的问题,以便其他人可以更好地为您提供帮助。

答案 1 :(得分:1)

我所做的就是观察UIDevice.orientationDidChangeNotification并更新必要的约束以实现不同的布局,就像您已经实现的那样。而且我认为这是解决问题的更好方法,并且永远不要尝试甚至不考虑为每个方向创建不同的视图。

遵守条件:

  • 第一个条件仅需要相应地设置axis属性。
  • arrangedSubviews的顺序是设计的一部分,因此,由开发人员决定是否必须手动重新排列。
  • 在这部分中,我要做的就是您所说的:removeFromSuperview()按钮和addSubview(view:)从一个子视图到另一个子视图。
  • 这是自动完成的,只要我们激活一个方向的约束并取消激活其他方向的约束,系统就可以毫无问题地更新UI。

最重要的是要确保在删除子视图时,与其相关的任何约束都将被删除,否则应用程序将崩溃。