【发布时间】:2019-09-30 13:45:55
【问题描述】:
我有一些方形按钮,我想添加与按钮高度成比例的圆角。在我的应用程序的过去版本中,我使用 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 上看起来是正确的,但半径在所有较小的设备上都太大了。
知道这里发生了什么吗?为什么它们都返回相同的帧高度,即使它们在不同设备上的视觉尺寸非常不同?
【问题讨论】:
-
super. viewDidLayoutSubviews()的电话在哪里?这应该是这里的第一行代码。 -
什么设置按钮的大小?他们是否设置了约束?较小设备上的按钮大小是否正确?问题只是圆角半径吗?
-
@rmaddy,添加 super.viewDidLayoutSubviews() 没有解决。按钮大小设置有约束,是的,它们的大小总是正确的。唯一的问题是拐角半径。
-
我已经确认,当它设置半径时,它认为所有按钮的框架高度都是 395.5,这仅适用于 12.9" iPad。我无法理解为什么会这样所有的over设备都是如此。
-
更多奇怪的信息 - 我将上面的代码复制并粘贴到 viewWillAppear() 方法中,问题得到了解决。然后我从 viewWillAppear() 中删除了代码,在发布问题期间留下了我的原始代码,并且它继续按预期运行(工作)。这种间歇性行为的原因可能是什么?