【问题标题】:Finding the size of a view adjusted by a UIStackView swift查找由 UIStackView swift 调整的视图的大小
【发布时间】:2015-11-06 03:01:20
【问题描述】:

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

【问题讨论】:

    标签: ios swift frame uistackview


    【解决方案1】:

    尺寸在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.
        }
    }
    

    【讨论】:

    • 不幸的是,这并不总是正确的。我遇到过很多情况,在super.layoutSubviews() 之后排列的子视图的几何形状正确。在我的具体情况下,我总是不得不在下一个运行循环中检查它们,这很荒谬。
    【解决方案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
    }
    

    【讨论】:

      【解决方案3】:

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

      yourStackView.convert(viewInsideStackView.frame to: parentView)
      

      这将返回viewInsideStackViewparentView 坐标系内的框架。

      【讨论】:

      • 这在被stackview调整后并没有得到子视图的框架。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      相关资源
      最近更新 更多