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

时间:2019-09-29 22:10:34

标签: ios swift

我有一些方形按钮,我想添加一些圆角,这些圆角与按钮的高度成比例。在我的应用程序的过去版本中,我使用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上,按钮看起来正确,但是在所有较小的设备上,半径最终都太大了。

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

2 个答案:

答案 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

    }