查找由 UIStackView 调整的视图的大小 swift
Finding the size of a view adjusted by a UIStackView swift
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.
}
}
我认为获得 Stackview 的子视图框架的更好方法是使用 convert
。
yourStackView.convert(viewInsideStackView.frame to: parentView)
这将使 return viewInsideStackView
的框架在 parentView
的坐标系内。
是的。在您的视图 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
}
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.
}
}
我认为获得 Stackview 的子视图框架的更好方法是使用 convert
。
yourStackView.convert(viewInsideStackView.frame to: parentView)
这将使 return viewInsideStackView
的框架在 parentView
的坐标系内。
是的。在您的视图 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
}