【问题标题】:Get the intrinsic height of a custom control获取自定义控件的固有高度
【发布时间】:2016-10-16 00:29:01
【问题描述】:

如何获取自定义控件的高度?

这个想法是我将使用它来动态设置自定义控件内一些按钮的高度。我在 Xcode 大小检查器中将占位符高度设置为 44。

根据 Apple 的 Start Developing iOS Apps (Swift) 教程,我正在尝试访问 frame.size.height,它给出的值是 1000,而教程似乎建议它应该是 44。

class RatingControl: UIView {
    ...
    override public var intrinsicContentSize: CGSize {
        let buttonSize = Int(frame.size.height)
        print(buttonSize) // prints 1000
        let width = (buttonSize * starCount) + (spacing * (starCount - 1))
        return CGSize(width: width, height: buttonSize)        
    }
    ...

【问题讨论】:

    标签: ios swift3


    【解决方案1】:

    您不应该在intrinsicContentSize 中访问frameintrinsicContentSize 应该返回完全适合视图内容的大小,无论其当前帧如何。

    在您的情况下,我认为您可以将 44 用于您的 buttonSize

    【讨论】:

    • Apple 的作者在他们的教程中以这种方式访问​​了frame,这很奇怪。将大小设置为 44 有效。我就随它去吧。
    【解决方案2】:

    占位符的固有大小就是占位符,因此 IB 解释器具有一些使用价值,并且可以布局场景的其余部分。但是在您的intrinsicContentSize getter 中,您实现了实际大小,AutoLayout 引擎将在运行时使用该大小。由于您返回 1000 作为内在内容高度,这就是您将在运行时看到的。

    【讨论】:

    • 1000 是从哪里来的,我怎样才能得到 44,因为它是在自定义控件的 height 属性上设置的?我想做类似let buttonSize = /* wherever 44 is */
    • 在您的 intrinsicContentSize 实现中,您返回 1000。您自己在评论 // prints 1000 中这么说。
    • 自动布局可以使用任何值作为视图的初始大小。它曾经使用来自 IB (interface builder) 的值,但从 iOS 10 开始,一切似乎都是 1000。
    • 1000 来自布局前的解码器。占位符值在解码期间无论如何都不会到达。
    • @ThisClark 在此处查看我的答案:stackoverflow.com/questions/22533418/… 这将帮助您入门。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多