Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Swift 通过ViewDidDisplay()或viewWillLayoutSubviews()设置角半径?_Swift_Uibutton_Rounded Corners_Cornerradius - Fatal编程技术网

Swift 通过ViewDidDisplay()或viewWillLayoutSubviews()设置角半径?

Swift 通过ViewDidDisplay()或viewWillLayoutSubviews()设置角半径?,swift,uibutton,rounded-corners,cornerradius,Swift,Uibutton,Rounded Corners,Cornerradius,总之,在viewWillLayoutSubviews()中,通过抓取按钮边界并将高度除以2来设置角半径以获得应用程序中UI按钮的左右圆边。但是,如果我通过uiBarButtonim()导航到另一个屏幕,请旋转设备,然后使用uiButtonim()返回屏幕,它们不是圆形的。角半径仍然基于上一方向的按钮尺寸。我尝试使用viewDidAppear,但在设置角半径时有第二个/明显的延迟 是否仍有加快ViewDidDisplay进程的方法?我认为ViewDisplay无法工作,因为视图控制器不知道我正在更

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

是否仍有加快ViewDidDisplay进程的方法?我认为ViewDisplay无法工作,因为视图控制器不知道我正在更改的uibutton的默认(方形)尺寸

我正在处理的应用程序如下:

改用,因为此时会有更新的边界,但在
视图willlayoutsubviews
中还没有

或者我可能建议使用一个button子类,它在自己的内部进行取整,从而使视图控制器不必迭代按钮并取整它们

例如:

@IBDesignable
class RoundedButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()

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

}
然后只使用这个类而不是
UIButton
。这将产生:


我尝试使用viewDidLayoutSubviews,但仍不成功。我将很快尝试在这里查看布局子视图。再次感谢您的帮助!好极了!这就解决了这个问题的答案!然而,我在为UIButton flash动画提供的扩展中实现了该方法。您是否知道为什么在扩展内部调用LayoutSubview会删除我的所有setAttributedTitle?我的setAttributedTitle是在viewDidLoad中设置的,但是当我实现UIButton.layoutSubviews()时,不会显示标题。您真的不应该重写任何方法(例如
LayoutSubview
)在基类的扩展中。您并不是真的想改变一个类的行为。如果你在一个子类中这样做,你不应该看到这种行为。好吧,那么我需要对它进行子类化,而不是将它实现到一个扩展中?我应该指出的是,我对Swift和编程总体来说还是比较陌生的。