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