可能发生的常见用例是需要为特定大小的类添加视图。 例如,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
初始化了特殊视图,因为我们可能有一个永远不需要特殊视图的设备。
答案 0 :(得分:0)
每次都不要添加和删除视图。只添加一次。只需根据traitCollectionDidChange中的trait激活和停用约束,如下面的代码。
if self.traitCollection.horizontalSizeClass == .compact {
NSLayoutConstraint.activate(horConstraintsArray)
NSLayoutConstraint.deactivate(vertConstraintsArray)
} else {
NSLayoutConstraint.activate(vertConstraintsArray)
NSLayoutConstraint.deactivate(horConstraintsArray)
}
此外,根据您在else部分中编写的代码,如果删除了视图,则会自动删除约束。当您旋转设备,创建和添加视图时,每次添加约束都是一项代价高昂的任务。