首页 > 解决方案 > 获取显示视图中所有内容所需的高度

问题描述

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

思考ScrollView > View > SubView > Dynamic Labels

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

我知道使用 UILabel,你可以做一些事情,比如val neededLabelHeight = label.sizeThatFits(CGFloat(width: label.frame.height, height: CGFloat.greatestFiniteMagnitude))让需要的高度显示在单个标签上,但是当我尝试在从 nib 加载的整个自定义视图上执行此操作时,它只是具有我在其中的视图的高度我的笔尖文件。

除了通过将所有需要的子视图高度和垂直约束相加来计算视图所需的高度之外,在具有更多子视图的视图上是否有类似的操作?

标签: swiftuiviewautolayout

解决方案


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

XIB 文件如下所示:

在此处输入图像描述

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

故事板看起来像这样:

在此处输入图像描述

滚动视图具有红色背景(以便于查看)。包含按钮的标签和视图是按我们通常设置的方式进行布局和设置约束的。

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

这是使用少量文本时的外观:

在此处输入图像描述

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

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

在此处输入图像描述

可滚动的(我们可以在这张图片中看到它向下滚动)。

对于喜欢使用“内容视图”作为滚动视图的“根”视图的人来说,它的工作原理是相同的(橙色视图是内容视图,每边插入 8 个点):

在此处输入图像描述

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

这是它的 gif 动画:


推荐阅读