swift - 获取显示视图中所有内容所需的高度
问题描述
我有一个自定义视图,它从具有多个子视图的 nib 加载。其中一些子视图包含可以是动态高度的标签。该视图最终作为子视图添加到滚动视图中的视图中。
思考ScrollView > View > SubView > Dynamic Labels
我正在使用自动布局约束,因此需要设置SubView
显示所有内容所需的高度,以便 ScrollView 滚动显示 SubView 中所有内容所需的长度。
我知道使用 UILabel,你可以做一些事情,比如val neededLabelHeight = label.sizeThatFits(CGFloat(width: label.frame.height, height: CGFloat.greatestFiniteMagnitude))
让需要的高度显示在单个标签上,但是当我尝试在从 nib 加载的整个自定义视图上执行此操作时,它只是具有我在其中的视图的高度我的笔尖文件。
除了通过将所有需要的子视图高度和垂直约束相加来计算视图所需的高度之外,在具有更多子视图的视图上是否有类似的操作?
解决方案
这是一个简单的例子......
XIB 文件如下所示:
注意:底部标签具有>= 8
到视图底部的约束。这样您就不必担心 IB 在设计过程中显示错误。底部的任何额外空间都会在运行时自动“消失”。
故事板看起来像这样:
滚动视图具有红色背景(以便于查看)。包含按钮的标签和视图是按我们通常设置的方式进行布局和设置约束的。
“蓝色”视图 - TheXIB Container View
- 具有高度约束120
,但设置为占位符,将在运行时删除,允许从 XIB 加载的视图控制其高度。这将是我们Labels Holder View
从 XIB 添加的视图。
这是使用少量文本时的外观:
它不可滚动,因为没有足够的内容。
点击“添加”按钮几次后,它看起来像这样:
它是可滚动的(我们可以在这张图片中看到它向下滚动)。
对于喜欢使用“内容视图”作为滚动视图的“根”视图的人来说,它的工作原理是相同的(橙色视图是内容视图,每边插入 8 个点):
这是此示例项目的链接:https ://github.com/DonMag/LoadXIBIntoScroll
这是它的 gif 动画:
推荐阅读
- node.js - nestjs 中的多个全局前缀
- elasticsearch - DSL查询以从多个键上的字典数组中查找元素
- python - 通过修改以前的值来更新 Dynamodb 中的值
- discord - discord.js message.member 似乎总是为空
- google-apps-script - 用于生成新行和带有脚本的按钮的 Google 应用脚本
- excel - 调用 Pascal DLL 后 Excel 崩溃
- node.js - 如何将节点 js 调试器附加到 Visual Studio 中的本地 iis
- javascript - 将变量从 js 函数传递给 gsap scrollTrigger
- android - UPI 深度链接付款被拒绝
- salesforce - Mule 4:Salesforce:未为此组织或合作伙伴启用 API