使子视图适合容器并正确调整大小
Make subview fit inside container and resize correctly
我正在尝试加载动态 nib 作为容器的子视图。我几乎让它工作了,除了子视图有一个我似乎无法摆脱的偏移量(参见下图中的粉红色视图)。
从视图层次调试:
正如您在第二张图片中看到的那样,容器框架已正确定位,而子视图却未正确定位,出于某种原因。
我真的不知道自动版式是怎么回事。
这是处理加载笔尖并将其分配为子视图的代码:
注释掉的代码是我试图让它工作的所有东西,但没有成功。我认为自动版式无需我做任何事情就可以自行工作,但默认情况下它会加载笔尖而不调整它的大小。
这意味着前导和顶部锚点是正确的,但是笔尖会使用其全尺寸...(参见下图)
所以问题是,我需要做什么才能加载笔尖并使其适合容器视图?
您应该为您的 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]))
}
}
我正在尝试加载动态 nib 作为容器的子视图。我几乎让它工作了,除了子视图有一个我似乎无法摆脱的偏移量(参见下图中的粉红色视图)。
从视图层次调试:
正如您在第二张图片中看到的那样,容器框架已正确定位,而子视图却未正确定位,出于某种原因。
我真的不知道自动版式是怎么回事。
这是处理加载笔尖并将其分配为子视图的代码:
注释掉的代码是我试图让它工作的所有东西,但没有成功。我认为自动版式无需我做任何事情就可以自行工作,但默认情况下它会加载笔尖而不调整它的大小。
这意味着前导和顶部锚点是正确的,但是笔尖会使用其全尺寸...(参见下图)
所以问题是,我需要做什么才能加载笔尖并使其适合容器视图?
您应该为您的 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]))
}
}