获取所需的高度以在视图中显示所有内容

时间:2018-12-06 19:11:07

标签: swift uiview autolayout

我有一个自定义视图,该视图是从具有多个子视图的笔尖加载的。其中一些子视图包含可以是动态高度的标签。该视图最终作为子视图添加到滚动视图中的视图。

思考ScrollView > View > SubView > Dynamic Labels

我正在使用自动布局约束,因此需要设置SubView的高度,以显示自身中的所有内容,以便ScrollView滚动显示在SubView中显示所有内容所需的长度。 / p>

我知道使用UILabel,您可以执行类似val neededLabelHeight = label.sizeThatFits(CGFloat(width: label.frame.height, height: CGFloat.greatestFiniteMagnitude))的操作以获取所需的高度,以显示在单个标签上,但是当我尝试在从笔尖加载的整个自定义视图上执行此操作时,我的笔尖文件中视图的高度。

是否在具有更多子视图的视图上执行类似的操作,而不是通过求和所有需要的子视图高度和垂直约束的总和来计算视图的高度?

1 个答案:

答案 0 :(得分:0)

这是一个简单的例子...

XIB文件如下所示:

enter image description here

注意:底部标签对视图底部的约束为>= 8。这样,您不必担心IB在设计过程中会显示错误。底部的任何多余空间都会在运行时自动“消失”。

故事板如下:

enter image description here

滚动视图的背景为红色(以便于查看)。包含按钮的标签和视图的布局和约束的设置与我们通常设置时一样。

“蓝色”视图-TheXIB Container View-的高度限制为120,但已设置为占位符,将在运行时将其删除,从而允许从XIB加载的视图进行控制它的高度。这将是我们从XIB添加Labels Holder View的视图。

这是带有少量文本的外观:

enter image description here

它不能滚动,因为没有足够的内容。

几次点击“添加”按钮后,看起来像这样:

enter image description here

并且它 可滚动(我们可以看到它在此图像中向下滚动)。

对于喜欢将“内容视图”用作滚动视图的“根”视图的人们,它的工作原理相同(橙色视图是内容视图,每侧各插入8点):

enter image description here

以下是此示例项目的链接:https://github.com/DonMag/LoadXIBIntoScroll

这是它的gif动画: