在哪里添加特定大小类的视图(以编程方式)

时间:2017-12-02 08:59:36

标签: ios size-classes adaptive-layout

可能发生的常见用例是需要为特定大小的类添加视图。 例如,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初始化了特殊视图,因为我们可能有一个永远不需要特殊视图的设备。

1 个答案:

答案 0 :(得分:0)

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

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

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