ios - 如何自动调整 ViewController 根视图的大小以适应其内容?
问题描述
UIViewController
在相应的 XIB 文件中创建新的根视图时,可以将其设置为任何固定高度。但是,根视图应该自动适应其内容。如何才能做到这一点?
- 创建一个新的 XIB 文件:
- 向根视图添加一个新的子视图,并给它一些固定的宽度和高度。
- 向子视图添加前导约束以定义 X 位置
- 向子视图添加顶部约束以定义 Y 位置
- 为子视图添加底部约束以定义内容高度(
top + subview height + bottom
) - 到目前为止一切都很好,因为
top + subview height + bottom
等于根视图的高度。 - 如果顶部或底部约束设置为另一个值,我希望根视图调整大小以匹配其内容。然而,IB 却抱怨约束冲突。
如何解决?
当然,在大多数情况下,根视图的大小不是由其内容定义的,而是由屏幕、模式视图等定义的。ViewController 显示在其中。
但是,我想将 ViewController 显示为ScrollView
另一个 ViewController 中的内容。在这种情况下,ContentViewController
应该匹配它的内容,并且 ScrollView 将确保完整的内容是可访问的。
这可以在 IB 中解决而不操纵代码中的约束吗?
解决方案
经过一些反复试验后,找到了一个可行的解决方案:简单地不要使用根视图:-)
我在 XIB 文件的根级别添加了另一个视图,并将根视图移到其中,使根视图成为新视图的子视图。只要 VCview
出口仍然指向根视图(不再处于根级别),它就可以正常工作。
仍然可以访问根视图theViewController.view
。由于它没有放置在根级别,因此根据其内容调整大小是没有问题的。
虽然这很好用,但它很hacky。有没有不需要虚拟包装视图的更清洁的解决方案?
推荐阅读
- javascript - Web 音频 API - 可以使振荡器的特定 LR 通道失谐吗?
- visual-studio - 无法更新当我使用 Visual Studio 安装程序更新新版本时(例如 15.7.* 到 15.9.* 或直到现在)
- java - 如何使用 TCP 套接字在 Java 和 Python 之间持续通信
- mysql - 向数据库添加数据时如何修复未找到列错误 [SQLSTATE[42S22]]
- gnuplot - 我的 gnuplot 适合度非常差,我该如何改进它?
- android - 预填充数据库的游标计数始终为 0
- javascript - npm table 不会填充 cli 命令行表?
- python - Pyspark 中压缩稀疏行方法中的矩阵向量乘法
- r - 如何拟合具有混合效果的 nls 模型
- assembly - 使用 CALL 读取 RIP 避免 shellcode 中的 0xFF 字节?