【问题标题】:Swift button frame height issue (viewDidLayoutSubviews)Swift 按钮框架高度问题(viewDidLayoutSubviews)
【发布时间】: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() 中删除了代码,在发布问题期间留下了我的原始代码,并且它继续按预期运行(工作)。这种间歇性行为的原因可能是什么?

标签: ios swift


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:
    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
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2021-06-15
      • 2013-11-18
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多