通过UIStackView快速查找调整后的视图大小



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的帧。

相关内容

  • 没有找到相关文章

最新更新