【问题标题】:Swift 3: Wrong UIView size readSwift 3:读取错误的 UIView 大小
【发布时间】:2016-09-24 10:49:42
【问题描述】:

我有一个 UIView,它在界面生成器中设置为 50x50 大小。

在应用程序中加载视图后,它看起来非常好,但是当我在加载后打印它的大小时

    override func awakeFromNib() {
    print(self.frame.height)
}

它返回 1000.0

直到我将项目更新到 Swift 3.0 后才出现此错误

有人知道可能发生了什么变化吗?为什么打印它的高度返回 1000.0 而实际上是 50.0?

【问题讨论】:

    标签: ios swift uiview swift3


    【解决方案1】:

    这是因为 UIView 在生命周期中尚未设置为 50x50。此时它是1000.0 - 标准尺寸。

    圆圈是:

    init    
    UIViewController awakeFromNib
    loadView
    UIView awakeFromNib
    UIViewController viewDidLoad
    viewWillAppear
    viewDidAppear
    

    从那时起,尺寸等属性就可以使用了。

    您需要使用 layoutIfNeeded 属性来提前访问布局。

    self.layoutIfNeeded()
    layer.cornerRadius = self.frame.height / 2.0
    layer.masksToBounds = true
    

    【讨论】:

    • 好的,我就是这么想的,但是我应该在 UIView 实现中使用什么方法来解决问题?
    • 您可以在 awakeFromNib 中通过self.frame.height = 50 硬设置高度,以便从那里开始使用它
    • 或者你使用viewDidAppear之后的高度
    • 所以基本上没有办法访问 UIView 实现中的评估属性,我必须在 viewController 中做所有这些事情?
    • 是的,正确。因为在实际调用视图之前没有设置大小的属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多