快速查找由 UIStackView 调整的视图大小

问题描述 投票:0回答:4

调整

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

ios swift frame uistackview
4个回答
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.
    }
}

3
投票

是的。在您的视图中

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
}

0
投票

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

convert

yourStackView.convert(viewInsideStackView.frame to: parentView)

这将返回

viewInsideStackView
的坐标系内的
parentView
的框架。


0
投票

✅ 从 UIStackview 获取维度,对我帮助很大。

let myStack = UIStackView(arrangedSubviews: [myView])
myView.setNeedsLayout()
myView.layoutIfNeeded()
print(myView.frame)
© www.soinside.com 2019 - 2024. All rights reserved.