UIView Swift和Xcode中的动态高度

UIView Swift和Xcode中的动态高度,xcode,uiview,autolayout,Xcode,Uiview,Autolayout,在Xcode 7.3中,我有以下自动布局设置: 单击该按钮时,我使用addSubview()将UILabel添加到红色UIView。我试图实现的是,当组合标签的大小超过红色UIView时,自动调整红色UIView和绿色UIView的大小 我曾尝试计算所有标签的大小,然后在didLayoutSubView()中设置红色视图的frame.size.height,这有点奏效,但在基于红色UIView的绿色UIView中也遇到了同样的问题。当嵌套大量UIView时,它也变得非常麻烦。一定有更好的方法来

在Xcode 7.3中,我有以下自动布局设置:

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

我曾尝试计算所有标签的大小,然后在
didLayoutSubView()
中设置红色视图的
frame.size.height
,这有点奏效,但在基于红色UIView的绿色UIView中也遇到了同样的问题。当嵌套大量UIView时,它也变得非常麻烦。一定有更好的方法来实现这一点?(没有视图)

我还玩了不同的自动布局设置没有运气。如果还可以将其添加到UIScrollView中,并使其内容大小也可以自行调整,则会有额外的好处


所有这些似乎都应该是一件小事,所以我想我忽略了一些小而简单的事情。非常感谢您提供有关如何使用Swift和/或Interface Builder完成此任务的任何指导。

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

1) 在UITableViewCell中添加UILabel

2) 将前导尾随顶部底部约束设置为UILabel的w.r.t.内容视图

3) 将UILabel的行数设置为0

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

tableView.estimatedRowHeight = 44
tableView.rowHeight          = UITableViewAutomaticDimension
使用addSubview()时

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

  • 正如我所看到的,你们已经在IB中为红色视图和红色视图设置了正确的约束。对于绿色视图,你们必须只在顶部设置约束,引导并训练到它的superview,并让它在底部展开,这样就没有约束了,所以以480作为常量删除约束

  • 现在,当您添加UILabel时,请确保实际约束它

    添加一个带有约束的UILabel(顶部、前导、尾随和底部的约束)很容易,但当我们需要动态添加更多约束时,我们需要努力处理约束(删除最后添加的标签的底部约束,添加垂直间距btw last added和新的约束,将尾随和底部空间引入容器)

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


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

    这对我来说非常有意义,我将在周末试一试,看看效果如何。非常感谢。