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