【问题标题】:How do you implement Size-Class-Specific Layout without storyboard?如何在没有情节提要的情况下实现 Size-Class-Specific Layout?
【发布时间】:2017-01-16 20:47:23
【问题描述】:

我需要为不同大小的类创建一些不同版本的布局,并且我需要在没有情节提要的情况下这样做。

我想知道最好的方法是什么?到目前为止,我有两个选择:

1) 只需删除 traitCollectionDidChange() 中的所有旧约束并设置新的约束集。

2) 将所有约束存储在我的 ViewController 中并在 traitCollectionDidChange() 中修改它们。

第二个选项在我看来更好,但我仍然有疑问:)

【问题讨论】:

  • 好吧,如果你看的话,它们都是一样的。修改现有的或删除旧的并创建新的,否则修改会这样做。我想看看其他一些选择。

标签: ios objective-c swift xcode autolayout


【解决方案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) 我听说激活一个数组比一个接一个的性能更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多