Swift button frame height issue (viewDidLayoutSubviews)



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

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

我将上面的代码复制并粘贴到 viewWillAppear(( 方法中,并且 问题已解决。然后我从中删除了代码 viewWillAppear((,在发布过程中给我留下了我的原始代码 问题,它继续按预期运行(工作(。什么 可能是这种间歇性行为的原因

您在viewWillAppear中初始化按钮并删除它们的原因,但它仍然有效,因为按钮的框架在viewDidLayoutSubview方法中没有更改。并且仅调用viewDidLayoutSubview控制器的视图更新、旋转或更改,而在您的情况下不会。

如果您尝试旋转设备,您将看到父视图的框架已更改。

有关视图层次结构的详细信息。请参阅此文章

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
}

相关内容

  • 没有找到相关文章

最新更新