如何让 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 适合其内容大小,直到在自动布局中滚动之前达到最大值的主要内容,如果未能解决你的问题,请参考以下文章
在 UIScrollView 中调整视图大小后,滚动视图不知道它改变了
调整 UIScrollView 的大小以适应其内容……不起作用
如何根据框架的大小分隔 UIScrollView/UITextView 的字符串
当 UIScrollView 位于自定义 UITableViewCell 中时,将 UIScrollView 的内容大小设置为其框架宽度