gpt4 book ai didi

ios - 获取 UIStackView subview 的框架

转载 作者:搜寻专家 更新时间:2023-10-31 08:10:29 26 4
gpt4 key购买 nike

我在 IB 中创建了一个 UIStackView,它的分布设置为 Fill Equally。我正在寻找每个 subview 的框架,但下面的代码总是返回 (0, 0, 0, 0)。

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)
}
}

我认为设置为平均填充的堆栈 View 会自动设置计算它。

如有任何帮助,我们将不胜感激。

最佳答案

阅读您的代码后,我认为这只是对 viewDidLayoutSubviews() 的误解。基本上当主视图的所有后代 View 都已布局时调用它,但这不包括这些 View 的 subview (后代)。参见讨论 notes来自 Apple。

"当 View Controller View 的边界改变时, View 调整其 subview 的位置,然后系统调用此方法。但是,调用此方法并不表示 View subview 的各个布局已经调整. 每个 subview 负责调整自己的布局。”

话虽这么说,现在有很多方法可以获取 subview 的框架。

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

    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 并在那里检查。

 override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print(stackView.arrangedSubviews[0].frame)
print(stackView.arrangedSubviews[1].frame)
}

关于ios - 获取 UIStackView subview 的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com