gpt4 book ai didi

ios - Swift 按钮框架高度问题 (viewDidLayoutSubviews)

转载 作者:搜寻专家 更新时间:2023-11-01 05:31:37 25 4
gpt4 key购买 nike

我有一些方形按钮,我想为其添加与按钮高度成比例的圆角。在我的应用程序的过去版本中,我使用 viewDidLayoutSubviews() 毫无问题地实现了此功能。出于某种原因,在推出具有我调整过的其他功能的应用程序的新版本后,这部分代码不再按预期运行。这是代码:

override func viewDidLayoutSubviews() {

for button in buttons {

button!.layer.shadowColor = UIColor.black.cgColor

button!.layer.shadowOffset = CGSize(width: 0, height: 1.0)

button!.layer.shadowOpacity = 0.4

button!.layer.shadowRadius = button!.frame.height / 40

button!.layer.cornerRadius = button!.frame.height / 10

}

同样,这段代码过去工作得很好,但由于某种原因它不再工作了。我遇到的情况是,与较大按钮 (iPad) 相比,较小按钮 (iPhone SE) 的相对半径要大得多。

为了解决问题,在 viewDidLayoutSubviews() 中,我正在打印按钮!.frame.height,我注意到无论我使用什么设备,框架高度都是 395.5,我认为只有在12.9"iPad。因此,按钮在 12.9"iPad 上看起来是正确的,但在所有较小的设备上最终半径都太大了。

知道这里发生了什么吗?为什么它们都返回相同的帧高度,即使它们在不同设备上的视觉尺寸非常不同?

最佳答案

I copy and pasted the above code into the viewWillAppear() method and the problem was resolved. I then deleted the code from viewWillAppear(), leaving me with my original code during posting of question, and it is continuing to run as expected (working). What could possibly be the cause of this intermittent behavior

之所以在 viewWillAppear 中初始化按钮并删除它们但它仍然有效,是因为按钮的框架在 viewDidLayoutSubview 方法中没有改变。并且 viewDidLayoutSubview 仅在 Controller 的 View 被更新、旋转或更改时被调用,在您的情况下它不会。

如果您尝试旋转设备,您会看到父 View 的框架发生了变化。

有关 View 层次结构的更多信息。看这个article

关于ios - Swift 按钮框架高度问题 (viewDidLayoutSubviews),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58159587/

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