调整
UIStackView
中的许多视图以适应堆栈。视图在没有框架的情况下初始化,因为它们是由堆栈视图调整大小的。有没有一种方法可以在堆栈视图调整视图大小后获取视图的大小?
尺寸在
UIStackView.layoutSubviews()
完成后即可提供。您可以子类化 UIStackView
并覆盖 layoutSubviews
:
class MyStackView: UIStackView {
override func layoutSubviews() {
super.layoutSubviews()
print("arrangedSubviews now have correct frames")
// Post a notification...
// Call a method on an outlet...
// etc.
}
}
是的。在您的视图中
layoutSubviews()
。
但是,您需要先强制 UIStackView 进行布局,在使用其大小之前使用 stack.layoutIfNeeded()
。
例如:
public override func layoutSubviews() {
super.layoutSubviews()
// Force the UIStackView to layout, in order to get the updated width.
stack.layoutIfNeeded()
let tabWidth = stack.arrangedSubviews[0].frame.size.width
}
我认为获取 Stackview 子视图框架的更好方法是使用
convert
。
yourStackView.convert(viewInsideStackView.frame to: parentView)
这将返回
viewInsideStackView
的坐标系内的 parentView
的框架。
✅ 从 UIStackview 获取维度,对我帮助很大。
let myStack = UIStackView(arrangedSubviews: [myView])
myView.setNeedsLayout()
myView.layoutIfNeeded()
print(myView.frame)