Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift按钮框架高度问题(ViewDidLayoutSubView)_Ios_Swift - Fatal编程技术网

Ios Swift按钮框架高度问题(ViewDidLayoutSubView)

Ios Swift按钮框架高度问题(ViewDidLayoutSubView),ios,swift,Ios,Swift,我有一些方形按钮,我想添加圆角,与按钮的高度成比例。在我的应用程序的以前版本中,我使用viewDidLayoutSubviews()实现了此功能,没有任何问题。出于某种原因,在推送了我的应用程序的新版本以及我调整过的其他功能后,这段代码不再像预期的那样工作。代码如下: override func viewDidLayoutSubviews() { for button in buttons { button!.layer.shadowColor = UIColor.black.cgColor

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

知道这是怎么回事吗?为什么它们都返回相同的帧高度,即使它们在不同的设备上的视觉尺寸非常不同

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

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

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


有关视图层次结构的详细信息。查看此

您的超级代码呼叫在哪里。viewDidLayoutSubviews()?这应该是这里的第一行代码。什么设置按钮的大小?它们是否设置了约束?较小设备上的按钮尺寸是否正确?问题只存在于角半径上吗?@rmaddy,添加super.viewdilayoutsubviews()无法解决问题。按钮大小是通过约束设置的,是的,它们的大小总是正确的。唯一的问题是拐角半径。我已经确认,当它设置半径时,它认为所有按钮的框架高度都是395.5,这只适用于12.9英寸的iPad。我很难理解为什么所有的over设备都是这样。更多奇怪的信息-我复制并将上面的代码粘贴到ViewWillAppeal()中方法,问题得到解决。然后,我从viewWillAppear()中删除了代码,在发布问题时留下了我的原始代码,并且它继续按预期运行(工作)。这种间歇性行为的原因可能是什么?
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

    }