如何在没有情节提要的情况下实现 Size-Class-Specific Layout?
Posted
技术标签:
【中文标题】如何在没有情节提要的情况下实现 Size-Class-Specific Layout?【英文标题】:How do you implement Size-Class-Specific Layout without storyboard? 【发布时间】:2017-01-16 20:47:23 【问题描述】:我需要为不同大小的类创建一些不同版本的布局,并且我需要在没有情节提要的情况下这样做。
我想知道最好的方法是什么?到目前为止,我有两个选择:
1) 只需删除 traitCollectionDidChange()
中的所有旧约束并设置新的约束集。
2) 将所有约束存储在我的 ViewController 中并在 traitCollectionDidChange()
中修改它们。
第二个选项在我看来更好,但我仍然有疑问:)
【问题讨论】:
好吧,如果你看的话,它们都是一样的。修改现有的或删除旧的并创建新的,否则修改会这样做。我想看看其他一些选择。 【参考方案1】:将您的约束存储在您的视图控制器中 - 如果可能,最好存储在数组中。然后,使用 viewWillTransition(to:size:) 来激活/停用。
var wC = [NSLayoutConstraint]()
var wR = [NSLayoutConstraint]()
var hC = [NSLayoutConstraint]()
var hR = [NSLayoutConstraint]()
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
super.viewWillTransition(to: size, with: coordinator)
// use following two lines if width changes from compact to regular
NSLayoutConstraint.deactivate(wC)
NSLayoutConstraint.deactivate(wR)
【讨论】:
感谢您的提示 ;) 在这里保存两组单独的约束似乎是个好方法 两个优点。 (1) 您不必移除任何约束,只需停用它们,并且 (2) 我听说激活一个数组比一个接一个的性能更好。以上是关于如何在没有情节提要的情况下实现 Size-Class-Specific Layout?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有情节提要的情况下设置 ViewController 的框架
如何在没有情节提要的情况下创建 ViewController 并将一个设置为另一个的委托?
在 Swift 3 中使用 didSelect 和 navigationController 在没有情节提要的情况下在 TableViewControllers 之间传递数据