当我点击按钮时,我使用addSubview()
将UILabel添加到Red UIView。我想要实现的是当组合标签的大小超过红色UIView时自动调整红色UIView和绿色UIView。
我试图计算所有标签的大小,然后在frame.size.height
中设置红色视图的didLayoutSubView()
,哪种方式有效,但是当我也做同样的事情时我遇到了麻烦绿色UIView,基于红色UIView。当嵌套很多UIViews时,它也变得非常麻烦。必须有更好的方法来实现这一目标吗? (没有UIStackView)。
我也玩过不同的自动布局设置而没有运气。奖金,如果这也可以添加到UIScrollView并使其contentSize也调整自己!
所有这些看起来应该是如此微不足道的事情,所以我认为我忽略了一些小而容易的东西。有关如何使用Swift和/或Interface Builder完成此任务的任何指导都将受到高度赞赏。
答案 0 :(得分:1)
使用addSubview()时,
您还需要约束该标签,以便红色视图知道有人正在尝试扩展它。
正如我所看到的,你已经在IB中设置了正确的约束和红色视图。对于绿色视图,您必须仅限制顶部,前导和训练到其超级视图,并让它在底部扩展,因此没有约束,因此将480的约束移除为常量。
现在,当您添加UILabel时,请确保以实用方式对其进行约束。
很容易添加一个带有约束的UILabel(Top,Leading,Trailing和bottom的约束),但是当动态我们需要添加更多时,我们需要努力克服约束(删除最后添加标签的底部constin,添加垂直间距btw最后添加和新的,导致尾随和底部空间到容器)。
我们在项目中遇到过这样的情况,所以我们最终在目标c中创建了UIView的子类。
NNVerticalStackView.h NNVerticalStackView.m
如果您只想要iOS9用户,则必须使用iOS9 API中引入的UIStackView。
答案 1 :(得分:0)
在这种情况下,您可以使用 UITableView 。
1)在 UITableViewCell
中添加 UILabel2)将领先,跟踪,热门和底部约束设置为 UILabel wrt UITableViewCell
的内容视图3)将UILabel的行数设置为零
4)最后,在 viewDidLoad()中使用以下代码行:
tableView.estimatedRowHeight = 44
tableView.rowHeight = UITableViewAutomaticDimension