通过viewDidAppear()或viewWillLayoutSubviews()设置拐角半径?

时间:2018-12-29 16:40:17

标签: swift uibutton rounded-corners cornerradius

总而言之,通过在ViewWillLayoutSubviews()中抓取按钮的边界并将高度除以2,可以设置应用程序中UIButton的圆角半径以得到左右圆形的边缘。但是,如果我通过UIBarButtonItem()导航到另一个屏幕,旋转设备,然后使用UIButtons()导航回到屏幕,则它们不是圆形的。角半径仍基于上一个方向的按钮尺寸。我尝试使用viewDidAppear,但是在设置拐角半径时有第二个/明显的延迟。

是否仍然可以加快viewDidAppear的处理过程?我不认为viewWillAppear会起作用,因为视图控制器不知道我要更改的uibutton的默认(正方形)尺寸。

我正在处理的应用程序是这样:

Screenshots of my current application from loading screen to the point of the corner radius not being updated correctly

1 个答案:

答案 0 :(得分:2)

请改用viewDidLayoutSubviews,因为此时您将拥有更新的边界,但viewWillLayoutSubviews中尚未更新边界。

或者我建议使用一个按钮子类,该子类在自己的layoutSubviews中进行舍入,从而使视图控制器不必遍历按钮并对其进行舍入。

例如:

@IBDesignable
class RoundedButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()

        let radius = min(bounds.width, bounds.height) / 2
        layer.cornerRadius = radius
    }

}

然后仅使用此类而不是UIButton。产生:

enter image description here