UIView在Swift和Xcode中的动态高度

时间:2016-05-12 13:58:17

标签: xcode uiview autolayout

在Xcode 7.3中,我使用自动布局进行以下设置: enter image description here

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

我试图计算所有标签的大小,然后在frame.size.height中设置红色视图的didLayoutSubView(),哪种方式有效,但是当我也做同样的事情时我遇到了麻烦绿色UIView,基于红色UIView。当嵌套很多UIViews时,它也变得非常麻烦。必须有更好的方法来实现这一目标吗? (没有UIStackView)。

我也玩过不同的自动布局设置而没有运气。奖金,如果这也可以添加到UIScrollView并使其contentSize也调整自己!

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

2 个答案:

答案 0 :(得分:1)

使用addSubview()时,

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

  2. 正如我所看到的,你已经在IB中设置了正确的约束和红色视图。对于绿色视图,您必须仅限制顶部,前导和训练到其超级视图,并让它在底部扩展,因此没有约束,因此将480的约束移除为常量。

  3. 现在,当您添加UILabel时,请确保以实用方式对其进行约束。

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

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

    NNVerticalStackView.h NNVerticalStackView.m

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

答案 1 :(得分:0)

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

1)在 UITableViewCell

中添加 UILabel

2)将领先跟踪热门底部约束设置为 UILabel wrt UITableViewCell

内容视图

3)将UILabel的行数设置为

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

tableView.estimatedRowHeight = 44
tableView.rowHeight          = UITableViewAutomaticDimension