首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取UIStackView subViews的框架

获取UIStackView subViews的框架
EN

Stack Overflow用户
提问于 2017-03-20 02:04:56
回答 1查看 9.6K关注 0票数 7

我在IB中创建了一个UIStackView,它的分布设置为均匀填充。我希望获得每个subView的帧,但以下代码总是返回(0,0,0,0)。

代码语言:javascript
复制
class ViewController: UIViewController {
    @IBOutlet weak var stackView: UIStackView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let pView = UIView()
        let sView = UIView()

        pView.backgroundColor = UIColor.red
        sView.backgroundColor = UIColor.orange

        stackView.addArrangedSubview(pView)
        stackView.addArrangedSubview(sView)
    }

    override func viewDidLayoutSubviews() {
        print(stackView.arrangedSubviews[0].frame)
        print(stackView.arrangedSubviews[1].frame)
    }
}

我认为设置为填充相等的堆栈视图会自动设置calculate it。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-20 07:32:47

仔细阅读您的代码后,我认为这只是对viewDidLayoutSubviews()的误解。基本上,当作为主视图的子视图的所有视图都已布置完毕时,就会调用它,但这不包括这些视图的子视图(子视图)。请参阅来自苹果的讨论notes

当视图控制器的视图的边界更改时,视图调整其子视图的位置,然后系统调用此方法。但是,调用此方法并不表示视图的子视图的各个布局已被调整。每个子视图负责调整其自己的布局。

现在有很多方法可以获得子视图的框架。

首先,您可以在viewdidload中添加一行代码并将其放入其中。

代码语言:javascript
复制
    override func viewDidLoad() {
    super.viewDidLoad()

    let pView = UIView()
    let sView = UIView()

    pView.backgroundColor = UIColor.red
    sView.backgroundColor = UIColor.orange

    stackView.addArrangedSubview(pView)
    stackView.addArrangedSubview(sView)
    stackView.layoutIfNeeded()
    print(stackView.arrangedSubviews[0].frame)
    print(stackView.arrangedSubviews[1].frame)

}

或者,您可以等到viewDidAppear,然后在那里检查。

代码语言:javascript
复制
 override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print(stackView.arrangedSubviews[0].frame)
    print(stackView.arrangedSubviews[1].frame)
}
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42890174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档