【问题标题】:viewDidLoad or didLayoutSubviews for setting rounded corners?用于设置圆角的 viewDidLoad 或 didLayoutSubviews?
【发布时间】:2020-10-29 08:34:56
【问题描述】:

我正在我的代码中寻找一个完美的位置来为我的视图设置圆角半径。 有时,在我将cornerRadius 设置为frame.height/2 后,UI 似乎缩小了我的视图,所以我得到了一个“更圆”的视图(看起来像一只眼睛)

我正在使用 Interface Builder 构建我的应用程序,所以我认为 viewDidLoad 应该是调用 myButton.layer.cornerRadius = myButton.frame.height/2 的正确方法

我也尝试在viewDidLayoutSubviews中设计我的观点,但也有一些奇怪的结果

所以我的一般问题是: 我应该将我的cornerRadius 代码放在哪里以确保我得到正确的结果?

感谢您的回复!

编辑:

问题尤其是按钮(或视图)的高度与超级视图成比例。固定高度它工作正常!

【问题讨论】:

    标签: swift uikit


    【解决方案1】:

    您是否只将myButton.layer.cornerRadius = myButton.frame.height/2 放在 viewDidLoad 中?

    如果将其放在两个视图中,则将其从子视图中删除。

    并确保按钮的大小为“正方形”。我的意思是身高和体重是相等的。

    【讨论】:

    • 我都试过了:仅在 viewDidLoad 和 didLayoutSubviews 中两者都不能正常使用比例高度
    【解决方案2】:

    viewDidLoad() 方法中设置圆角半径应该可以正常工作。

    如果你得到了“更圆”的效果,就像你所说的那样,试着设置你的半径

    myButton.layer.cornerRadius = myButton.bounds.height/2

    然后调用

    myButton.layoutIfNeeded().

    编辑

    如果你有很多按钮要设置,你可以在这样的扩展中创建一个通用方法

    extension UIView
    {
        func setup(withCornerRadius radius: CGFloat) 
        {
            self.layer.cornerRadius = radius
            self.layoutIfNeeded()
        }
    }
    

    然后调用

    myButton.setup(withCornerRadius: myButton.bounds.height/2)
    

    【讨论】:

    • 所以在 viewDidLoad 中为每个(圆形)视图调用 layoutIfNeeded
    • 好的,我试过了,但如果我的按钮的高度与超级视图成比例而不是固定高度,我仍然会遇到同样的问题(“更多然后是圆形”)。你知道如何实现高度成比例的圆形按钮吗?
    • 尝试在 viewWillAppear 方法中移动 setup 调用。
    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 2011-11-17
    • 2018-09-04
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多