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)
这将在parentView
的坐标系内返回viewInsideStackView
的帧。