【问题标题】:Correctly Size UILabel inside UIScrollView using Interface Builder and Autolayout?使用 Interface Builder 和 Autolayout 在 UIScrollView 中正确调整 UILabel 的大小?
【发布时间】:2014-05-12 19:51:40
【问题描述】:

我在界面生成器中创建了一个简单的视图设置。下面是它的外观:

视图层次结构很简单:

view
- scrollView
-- label

滚动视图显示为 grey 背景锚定到其超级视图顶部、前导、尾随和底部,约束为 0。

标签以yellow 背景显示,并具有如图所示的约束。此外,该标签的水平和垂直都有content hugging priority1000,水平和垂直都有content compression resistance priority1000

纵向时,标签大小正确:

然而,在横向上,标签的水平尺寸不正确(我打算让标签填满屏幕的宽度,如图所示的约束插图较少):

我怎样才能让这个标签在横向上正确调整大小?

【问题讨论】:

    标签: ios uiscrollview autolayout


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2016-03-18
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多