我尝试将动态笔尖加载为容器的子视图。我几乎得到了它的工作,除了子视图有一个我似乎无法摆脱的偏移(参见下面图片中的粉红色视图)。
从View Hierarchy调试:
正如您在第2张图片中看到的那样,容器框架已正确定位,而子视图由于某种原因而不是 。
我真的不知道autolayout会发生什么。
以下是处理加载笔尖并将其指定为子视图的代码:
注释掉的代码是我尝试使其成功的所有内容,但没有成功。我认为autolayout可以独立工作而不需要做任何事情,但默认情况下它加载nib而不调整它。
这意味着前导和顶部锚是正确的,但是笔尖然后使用它的全尺寸......(参见下图)
所以问题是,为了加载笔尖并使其适合容器视图,我需要做些什么?
答案 0 :(得分:4)
您应该为NibView添加约束,而不是设置NibView的边界和框架。
在将NibView添加为内容视图的子视图后,尝试在NibView上调用以下函数(addFullScreenConstraint):
extension UIView {
/// Adds constraints to this `UIView` instances `superview` object
/// to make sure this always has the same size as the superview.
/// Please note that this has no effect if its `superview` is `nil`
/// – add this `UIView` instance as a subview before calling this.
func addFullScreenConstraints() {
guard let superview = self.superview else {
return
}
self.translatesAutoresizingMaskIntoConstraints = false
superview.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[subview]-0-|",
options: .directionLeadingToTrailing, metrics: nil, views: ["subview": self]))
superview.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[subview]-0-|",
options: .directionLeadingToTrailing, metrics: nil, views: ["subview": self]))
}
}