如何在没有情节提要的情况下实现 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 并将一个设置为另一个的委托?

在没有情节提要的情况下使用 UITableView

在 Swift 3 中使用 didSelect 和 navigationController 在没有情节提要的情况下在 TableViewControllers 之间传递数据