0

可能发生的一个常见用例是需要为特定尺寸类添加视图。例如,wRegular。

我们可能想添加一个额外的标签来利用额外的空间。

我的问题是我应该在哪里添加这个标签,更具体地说,我们应该在下面的方法中将这个标签添加到我们的视图中吗?

traitCollectionDidChange


我正在考虑做这样的事情

// sudo code
traitCollectionDidChange{

    if (wR){
        create special view if special view is nil 
        self.view.addChildView(special View) 
        set constraints for wRegular size class

     } else{
        self.view.removeChildView(special View) 
        deactivate special view constraints (if not nil)
        set constraints for ... size class 

     }
}

似乎有很多关于如何在界面生成器中执行此操作的示例,但我不确定我们将在哪里实际初始化额外的视图。

我初始化了特殊视图,traitCollectionDidChange因为我们可能有一个永远不需要特殊视图的设备。

4

1 回答 1

0

不要每次都添加和删除视图。只添加一次。只需根据 traitCollectionDidChange 中的特征激活和停用约束,如下面的代码。

   if self.traitCollection.horizontalSizeClass == .compact {
     NSLayoutConstraint.activate(horConstraintsArray)
     NSLayoutConstraint.deactivate(vertConstraintsArray)
   } else {
     NSLayoutConstraint.activate(vertConstraintsArray)
     NSLayoutConstraint.deactivate(horConstraintsArray)
   }

此外,根据您在 else 部分中编写的代码,如果删除了视图,则会自动删除约束。当您旋转设备、创建和添加视图时,每次都添加约束是一项代价高昂的任务性能。

于 2017-12-02T09:38:25.310 回答