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