获取自定义控件的固有高度
Posted
技术标签:
【中文标题】获取自定义控件的固有高度【英文标题】: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)
...
【问题讨论】:
【参考方案1】:您不应该在intrinsicContentSize
中访问frame
。 intrinsicContentSize
应该返回完全适合视图内容的大小,无论其当前帧如何。
在您的情况下,我认为您可以将 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 在此处查看我的答案:***.com/questions/22533418/… 这将帮助您入门。以上是关于获取自定义控件的固有高度的主要内容,如果未能解决你的问题,请参考以下文章