ios – UILabel不会使用AutoLayout在UIScrollView中自动换行

我在UIScrollView中有一个UILabel,我试图用自动换行.我想使用AutoLayout进行布局配置.当UILabel不在UIScrollView中时,它会完美地包装.我只需要将行数设置为0并将换行模式设置为自动换行.

但是,当我将UILabel放在UIScrollView中时,自动换行不再起作用.我已经检查了“Dynamic UILabel height inside UIScrollView with AutoLayout”和“Correctly Size UILabel inside UIScrollView using Interface Builder and Autolayout?”,但这两个问题都没有帮助我的答案.

如果有人想看一下,我有set up a test project说明我正在谈论的内容.

解决方法

原因是滚动视图中的约束(固定在滚动视图中)并不意味着您认为它们的含义.它们与从内到外确定滚动视图的contentSize有关;他们不会从外面确定滚动视图内部事物的大小.请参阅我的答案: https://stackoverflow.com/a/13548039/341994

在您的情况下,最简单的解决方案是使用中间内容视图,以便您具有此层次结构:

scroll view
    content view
        label

现在给出内容视图的绝对宽度和高度约束,并将它们全部固定在滚动视图的四个边上.现在标签将按预期工作.内容视图有足够的约束来绝对设置自己的大小,并从内部约束滚动视图的contentSize.同时,对标签的约束不是滚动视图而是内容视图,并且由于内容视图具有固定大小并且是普通视图(不是滚动视图),因此标签上的约束符合您的预期.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...