在下面的屏幕截图中,我所做的唯一更改是为约束连接了IBOutlet。断开连接,屏幕布局正确。连接后,屏幕布局不正确。我以前从未见过这种情况,也不知道该如何解决。我需要能够修改约束的常量值,以便根据是否存在特定项来调整子视图的大小。
IBOutlet声明为:
@IBOutlet weak var tabContentBottomConstraint: NSLayoutConstraint!
到目前为止,我还没有实现任何读取或修改此约束的代码。我将其添加到我的视图控制器中以准备使用它,但是并没有做进一步的事情,因为在添加IBOutlet之后运行代码时,视图大小不正确。我添加和删除了几次,总是得到相同的结果。
这是连接插座之前有关视图大小的调试器信息:
这是在连接IBOutlet之后没有任何其他代码更改的情况下的调试器信息:
y偏移量的差异很大,并将视图推离屏幕。就像我在上面说的那样,没有代码读取或写入该IBOutlet。
rolePageDrawerView是约束中的item2,而item1是视图控制器的view.safeAreaLayoutGuide。 rolePageDrawerView嵌入view.safeAreaLayoutGuide的子视图的3个层次中。
答案 0 :(得分:0)
我找到了一种方法来解决此怪异行为,方法是使用以下代码以编程方式搜索约束:
guard let tabContentBottomConstraint = view.constraints.filter({ $0.secondItem! as! NSObject == rolePageTabContentView }).first else {
fatalError("unable to find the constraint for drawer sizing")
}
self.tabContentBottomConstraint = tabContentBottomConstraint
即使不再注入约束,我也将其作为弱引用,因为视图本身将对其进行引用以使其保持活动状态。可以。
但是,我想提出一个更好的解决方案。上面的搜索在将来某些布局更改时非常脆弱。如果框架在不破坏布局的情况下注入约束,那就更好了。仍然开放寻求更好的解决方案。