我有一些方形按钮,我想添加一些圆角,这些圆角与按钮的高度成比例。在我的应用程序的过去版本中,我使用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上,按钮看起来正确,但是在所有较小的设备上,半径最终都太大了。
知道这里发生了什么吗?为什么即使它们在不同设备上的尺寸在视觉上差异很大,他们都返回相同的帧高?
答案 0 :(得分:0)
我将上面的代码复制并粘贴到viewWillAppear()方法中, 问题已解决。然后,我从中删除了代码 viewWillAppear(),在发布过程中留给我原始代码 问题,并且它继续按预期运行(正常运行)。什么 可能是这种间歇性行为的原因
在viewWillAppear
中初始化按钮并将其删除的原因仍然存在,因为在viewDidLayoutSubview
方法中按钮的框架没有改变。 viewDidLayoutSubview
仅在控制器的视图被更新,旋转或更改的情况下被调用,而在您的情况下则不会。
如果您尝试旋转设备,则会看到父视图的框架已更改。
有关视图层次结构的更多信息。看到这个article
答案 1 :(得分:0)
Try like this:-
override func viewDidLayoutSubviews() {
super.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
}