如何让 UIScrollView 适合其内容大小,直到在自动布局中滚动之前达到最大值

Posted

技术标签:

【中文标题】如何让 UIScrollView 适合其内容大小,直到在自动布局中滚动之前达到最大值【英文标题】:How to have a UIScrollView fit its content size, up until a max before scrolling in autolayout 【发布时间】:2016-06-08 17:10:55 【问题描述】:

我想在 autolayout 中创建一个 UIScrollView,它将完全包含它的内容(不滚动),直到内容达到一定大小(比如 400),然后它开始滚动。

所以我的观点是这样的

如果我设置Scroll View.height = ContentView.height,则滚动视图会展开以适应所有内容。到目前为止一切顺利。

现在,如果我尝试通过Scroll View.height <= 400 设置最大高度,最终会发生的情况是它也设置了ContentView.height(由于Scroll View.height = ContentView.height)并且文本被截断并且不滚动

那么这甚至可能与自动布局有关吗?这似乎很容易用框架来完成,但我想要一个自动布局的解决方案。

如果您想自己玩,这里是示例项目 - https://github.com/iwllyu/content-hugging-uisv-with-max

【问题讨论】:

您有什么理由不能使用UITextView 而不是其中包含多行UILabel 的滚动视图? 我可以使用 UITextView - 我想我可以在上面设置一个最大高度,然后它就会得到处理? 其实,没关系...我认为使用UITextView 也会出现问题。没有办法使用 just 自动布局来使文本视图扩展以适应其内容,所以在这种情况下使用UILabel 确实是最好的...... 【参考方案1】:

其他的一切你都做对了。 但要使其正常工作,您应该将Scroll View.height = ContentView.height 约束的优先级设置为小于子视图的抗压缩优先级(即此处为UILabel)。

所以在你的情况下,低于 750 的任何东西都可以工作。

【讨论】:

太棒了!我将最大高度的优先级设置为 1000,将等高的优先级设置为 750,并使用抗压属性的默认值。我认为它们只是相对于彼此,而不是拥抱/压缩优先级。谢谢!

以上是关于如何让 UIScrollView 适合其内容大小,直到在自动布局中滚动之前达到最大值的主要内容,如果未能解决你的问题,请参考以下文章

真的不可能让 div 的大小适合其内容吗?

在 UIScrollView 中调整视图大小后,滚动视图不知道它改变了

UIScrollView 在内容小于视图大小时反弹

调整 UIScrollView 的大小以适应其内容……不起作用

如何根据框架的大小分隔 UIScrollView/UITextView 的字符串

当 UIScrollView 位于自定义 UITableViewCell 中时,将 UIScrollView 的内容大小设置为其框架宽度