Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 查找由视图调整的视图的大小_Ios_Swift_Frame_Uistackview - Fatal编程技术网

Ios 查找由视图调整的视图的大小

Ios 查找由视图调整的视图的大小,ios,swift,frame,uistackview,Ios,Swift,Frame,Uistackview,调整UIStackView中的许多视图以适应堆栈。视图初始化时没有框架,因为它们是由堆栈视图调整大小的。是否有一种方法可以在堆栈视图调整视图大小后获得视图的大小 尺寸在UIStackView.layoutSubviews()完成后可用。您可以子类化UIStackView并覆盖layoutsubview: class MyStackView: UIStackView { override func layoutSubviews() { super.layoutSubview

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

尺寸在
UIStackView.layoutSubviews()完成后可用。您可以子类化
UIStackView
并覆盖
layoutsubview

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)

这将在父视图的坐标系内返回视图的框架。

是。在视图的
布局子视图()
中。 但是,在使用UIStackView的大小之前,需要先使用
stack.layoutifneed()
强制它进行布局

例如:


不幸的是,这并不总是正确的。我遇到过许多情况,在
super.layoutSubviews()
之后,排列的子视图的几何图形不正确。在我的特殊情况下,我总是要在下一次运行循环中检查它们,这很可笑。但在通过stackview进行调整后,这并没有得到子视图的帧。
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
}