2016-05-12 57 views
-1

UIView的动力高度在7.3的Xcode我有自动布局以下设置: enter image description here在斯威夫特和Xcode中

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

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

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

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

回答

1

当您使用addSubview()时,

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

  2. 正如我所看到的,您已经在IB中对正确的约束和红色视图进行了限制。对于绿色视图,您只能对顶级视图进行约束,领导和训练,并让它在底部展开,因此不存在约束,因此请将480限制为不变。

现在,当您添加一个UILabel时,请务必以实用的方式限制它。

它很容易添加一个带约束的UILabel(约束Top,Leading,Trailing和Bottom),但是当动态我们需要添加更多的时候,我们需要用限制来玩弄(去掉最后添加的标签的底部常量,添加最后添加的垂直间距btw和新的,引导尾部和底部空间到容器)。

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

NNVerticalStackView.h NNVerticalStackView.m

如果你打算iOS9用户仅必须使用UIStackView在iOS9 API的推出。

+0

这对我来说非常有意义,我会在周末考虑一下,看看它是如何发展的。谢谢! –

0

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

1)添加的UILabel的UITableViewCell

2)设置领先尾随底部约束到的UILabel w.r.t. 内容视图的的UITableViewCell

3)的UILabel的行数设置为

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

tableView.estimatedRowHeight = 44 
tableView.rowHeight   = UITableViewAutomaticDimension