【问题标题】:UIView dynamic height in Swift and XcodeSwift 和 Xcode 中的 UIView 动态高度
【发布时间】:2016-09-08 10:06:35
【问题描述】:

在 Xcode 7.3 中,我使用自动布局进行了以下设置:

当我单击按钮时,我使用addSubview() 将 UILabel 添加到红色 UIView。我想要实现的是当组合标签的大小超过红色 UIView 时,自动调整红色 UIView 和绿色 UIView 的大小。

我试图计算所有标签的大小,然后在didLayoutSubView() 中设置红色视图的frame.size.height,这有点工作,但是当我对绿色 UIView 做同样的事情时遇到了麻烦,基于在红色的 UIView 上。嵌套很多 UIView 时也变得非常麻烦。必须有一些更好的方法来完成这个? (没有 UIStackView)。

我也尝试过不同的自动布局设置,但没有成功。如果这也可以添加到 UIScrollView 并使其 contentSize 也可以自行调整,则可以加分!

这一切似乎应该是一件微不足道的事情,所以我认为我忽略了一些小而容易的事情。任何有关如何使用 Swift 和/或 Interface Builder 完成此任务的指导都将受到高度赞赏。

【问题讨论】:

    标签: xcode uiview autolayout


    【解决方案1】:

    在这种情况下,您可以使用 UITableView

    1) 在UITableViewCell

    中添加一个UILabel

    2) 为 UILabel 设置 LeadingTrailingTopBottom 约束> 写UITableViewCell

    内容视图

    3) 将 UILabel 的行数设置为

    4) 最后,在 viewDidLoad() 中使用以下代码行:

    tableView.estimatedRowHeight = 44
    tableView.rowHeight          = UITableViewAutomaticDimension
    

    【讨论】:

      【解决方案2】:

      当你使用 addSubview() 时,

      1. 您还需要约束该标签,以便红色视图知道有人试图扩展它。

      2. 正如我所见,您在 IB 中设置了正确的约束和红色视图。对于绿色视图,您必须只约束其上层视图的顶部、前导和训练,并让它在底部展开,因此那里没有约束,因此以 480 为常量删除约束。

      现在,当您添加 UILabel 时,请确保您以务实的方式正确约束它。

      添加一个带有约束的UILabel很容易(Top,Leading,Trailing和bottom的约束),但是当我们需要动态添加更多时,我们需要努力使用约束(删除最后添加的标签的底部约束,添加垂直间距 btw 最后添加和新的,前导尾随和底部空间到容器)。

      我们在项目中遇到过这样的情况,所以我们最终在objective c中创建了一个UIView的子类。

      NNVerticalStackView.h NNVerticalStackView.m

      如果您只打算使用 iOS9 用户,则必须使用 iOS9 API 中引入的 UIStackView。

      【讨论】:

      • 这对我来说非常有意义,我会在周末试一试,看看效果如何。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2021-06-13
      • 2019-01-26
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多