gpt4 book ai didi

ios - 如果删除和添加相同的 View ,UIStackView 不会填充

转载 作者:行者123 更新时间:2023-11-30 12:28:08 26 4
gpt4 key购买 nike

我在 iOS 9 中发现了一个问题,即在删除和添加相同 View 到 UIStackView 时布局无法正常工作,并使用 View 的内在内容大小而不是指定的 fillEqually 分发类型。

例如,这段代码:

class ViewController: UIViewController {

let stackView = UIStackView()

let red = UIButton()
let blue = UIButton()
let green = UIButton()

override func viewDidLoad() {
super.viewDidLoad()

stackView.distribution = .fillEqually

red.backgroundColor = .red
blue.backgroundColor = .blue
green.backgroundColor = .green

let views = [red, blue, green]

for view in views {
stackView.addArrangedSubview(view)
}

view.backgroundColor = .lightGray
view.addSubview(stackView)
stackView.frame = view.bounds.insetBy(dx: 0, dy: view.frame.height / 3)

let button = UIButton()
button.frame = view.bounds
view.addSubview(button)

button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
}

func buttonClicked() {
for view in stackView.arrangedSubviews {
view.removeFromSuperview()
}

stackView.addArrangedSubview(red)
stackView.addArrangedSubview(blue)
}
}

点击屏幕后显示以下结果:

enter image description here

但在 iOS 10 上它显示了预期的结果:

enter image description here

创建新 View 而不是重用旧 View 会输出 iOS 9 上的预期布局:

func buttonClicked() {
for view in stackView.arrangedSubviews {
view.removeFromSuperview()
}

let red = UIButton()
let blue = UIButton()
red.backgroundColor = .red
blue.backgroundColor = .blue

stackView.addArrangedSubview(red)
stackView.addArrangedSubview(blue)
}

但是这段代码的重点是重用 View 来提高性能。

这是我的代码中的问题吗? iOS 9 上的错误?有任何已知的解决方法吗?

最佳答案

for view in stackView.arrangedSubviews {
stackView.removeArrangedSubview(view)
view.removeFromSuperview()
}

我认为您忘记调用removeArrangedSubview

关于ios - 如果删除和添加相同的 View ,UIStackView 不会填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43921429/

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