9

调整aUIStackView中的许多视图以适应堆栈。视图初始化时没有框架,因为它们由堆栈视图调整大小。有没有一种方法可以在堆栈视图调整视图大小后获取视图的大小?

4

3 回答 3

5

尺寸在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.
    }
}
于 2015-11-06T03:21:06.387 回答
2

是的。在您的视图中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
}
于 2020-05-12T12:33:40.810 回答
0

我认为获得 Stackview 的子视图框架的更好方法是使用convert.

yourStackView.convert(viewInsideStackView.frame to: parentView)

这将返回'坐标系viewInsideStackView内的 ' 框架。parentView

于 2017-02-28T21:01:12.410 回答