使用 Interface Builder 和 Autolayout 在 UIScrollView 中正确调整 UILabel 的大小?
Posted
技术标签:
【中文标题】使用 Interface Builder 和 Autolayout 在 UIScrollView 中正确调整 UILabel 的大小?【英文标题】:Correctly Size UILabel inside UIScrollView using Interface Builder and Autolayout? 【发布时间】:2014-05-12 19:51:40 【问题描述】:我在界面生成器中创建了一个简单的视图设置。下面是它的外观:
视图层次结构很简单:
view
- scrollView
-- label
滚动视图显示为 grey
背景锚定到其超级视图顶部、前导、尾随和底部,约束为 0。
标签以yellow
背景显示,并具有如图所示的约束。此外,该标签的水平和垂直都有content hugging priority
和1000
,水平和垂直都有content compression resistance priority
和1000
。
纵向时,标签大小正确:
然而,在横向上,标签的水平尺寸不正确(我打算让标签填满屏幕的宽度,如图所示的约束插图较少):
我怎样才能让这个标签在横向上正确调整大小?
【问题讨论】:
【参考方案1】:为您提供一种解决方案。
1. 将您的 UIScrollView 添加到 container (UIView) 中,并且具有零约束:
2. 为标签添加约束:顶部、底部、前导、尾随空格 = 20。
3. 添加约束:label.width = container.width - 40
为此,在视图结构树中选择标签,点击 ctrl 并拉 到容器。并选择等宽。 然后选择创建的约束并转到它的实用程序并设置 常量值为 40。您应该获得以下组件:
运行应用程序,转到横向,它就可以工作了!
希望很清楚。最好的问候。
【讨论】:
非常感谢!这是堆栈上的最佳解决方案! 如果我在 Label 下(在同一个 ScrollView 内)有 TableView,我应该如何设置常量? @EvgenyFedin,据我了解,您想在 ScrollView 的底部添加一些 TableView,以便整个查看表格视图而无需内部滚动。 @EvgenyFedin,比如可以在ScrollView上添加tableView,会展开。然后只需将前导、尾随、底部约束添加到超级视图和顶部约束到标签。此外,您应该将约束添加到 tableView 的高度并将其与控制器中的插座连接。然后在每次重新加载表视图数据后更新高度约束:tableHeightConstraint.constant = tableView.contentSize.height。因此,scrollView 将变得足够大。【参考方案2】:很难说出要添加/删除哪些约束以获得您想要的东西,因为 ios 保留在无法满足所有约束时调整约束的权利。
我用与您相同的视图(UILabel
作为UIScrollView
的子视图)创建了一个空白项目,并进行了一些限制以使 UILabel 在横向上正确调整大小。
必须检查:
确保从 pin 选项设置垂直/水平间距约束,如下所示,并尝试手动删除不需要的约束。【讨论】:
感谢您的回复。您能否详细说明“做出一些限制以正确调整UILabel
的大小”?
@JRG-Developer 为您的标签添加水平中心约束,它将起作用
首先选择滚动视图,然后选择底部的 PIN 选项,然后单击左右间距,使它们显示为红色(在您的示例中也将它们的值设置为 20)。对UILabel
执行相同操作。此外,如果您使用 Xcode5,您可能会受益于自动 Resolve Auto Layout Issues
选项,选择它,然后从弹出菜单中选择 Add missing constraints
。以上是关于使用 Interface Builder 和 Autolayout 在 UIScrollView 中正确调整 UILabel 的大小?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Interface Builder 编辑 UITableViewCell 的模式