Ios 使具有动态高度子视图的UIScrollView自动与自动布局一起工作

Ios 使具有动态高度子视图的UIScrollView自动与自动布局一起工作,ios,objective-c,uiscrollview,autolayout,resize,Ios,Objective C,Uiscrollview,Autolayout,Resize,我有以下视图结构及其约束: UIView "parent" UIScrollView (leading, trailing, top and bottom to superview) - UIView "container" (leading, trailing, top and bottom to UIScrollView, equal width and height so parent UIView)

我有以下视图结构及其约束:

UIView "parent"
   UIScrollView (leading, trailing, top and bottom to superview)
      - UIView "container" (leading, trailing, top and bottom to UIScrollView, 
                            equal width and height so parent UIView)
         - UIView "A" (leading, trailing, top to UIScrollView, height of 200)
         - UIView "B" (top, leading and trailing to UIView A, height of 140)
         - UIView "C" (top, leading and trailing to UIView B, height >= 88 "rest
                       of the screen until bottom", bottom to UIView "container")
“A”和“B”
UIView
不会更改其大小,但“C”会更改。在其中,我以编程方式添加了n“标签容器”
UIView
,这些容器的高度取决于它们所承载的m
UILabel
的内容

现在,我正在使用
boundingRectWithSize:
计算n
UILabel
的大小,并且我正在调整它们的父“标签容器”
UIView
的高度,它被添加到“C”
UIView
中,并将其高度约束设置为所有
UILabel
的总和

然后,调整“C”
UIView
高度约束的大小,使其等于所有添加的
UIView
的总和

这是完美的工作在所有不同的屏幕大小,纵向和横向。
UIScrollView
显示所有三个“A”、“B”和“C”子视图,其中包含“C”nUIView主机mUILabel

但现在我在旋转设备时遇到问题。我面临的问题是,我必须重新计算所有
UILabel
的大小,以更改所有“labels container”
UIView
的高度约束,并更改“C”
UIView
高度约束,以便它可以适应所有视图之间没有大空格的所有内容

因此,我的问题是:我如何使用独占的
自动布局
实现相同的行为

现在,我必须重新计算大小并更改高度限制,以便所有内容都能适应,但我希望所有
UILabel
都能自动调整大小并适应其内容,然后“标签容器”
UIView
调整大小以适应所有
UILabel
,然后是“C”
UIView
自动调整大小以适应内容


提前谢谢你

据我所知,您需要为动态标签添加
TableView
,要实现这一点,您必须遵循以下步骤:

1步骤:
ViewController
中添加
ScrollView

2步骤:在ScrollView中添加
ContainerView
,以管理滚动
约束

3步骤:添加一个固定大小的“A”视图,比如说150px

4步骤:添加固定大小的“B”视图,比如说150px

5步骤:为固定大小为0px的动态标签添加
TableView
。在这一步中,将您的
表格视图
高度
约束
导出,我们将在下一步中使用它

6步骤:呼叫您的服务并在
表视图中添加标签

在此第6步中,在表视图中添加标签意味着在重新加载表视图时,请执行以下动态高度约束代码

7步骤:现在根据您的行高调整表格视图的高度,如下所述

arrListArray = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Ten"];
int rowHeight = 44;
self.tblHeightConstraint.constant = (rowHeight * arrListArray.count);
现在使用以下方法重新加载约束:

[UIView animateWithDuration:0.1
                     animations:^{
                         // Called on parent view
                         [self.view layoutIfNeeded];
}];
它会自动增加您的scrollView包含大小

显示示例图像:

视图约束堆栈:

现在,根据您的评论,您必须添加
CollectionView
以代替
tableView
,并在
CollectionViewCell
中添加
tableView
,使用您的特定设计


希望这会有帮助

好吧,我做错了三件事:

1st:我正在计算标签的高度,然后使用高度约束设置“标签容器”的大小
UIView
。由于
自动布局
管理所有内容,因此不需要高度约束

2nd:我通过添加添加的每个“标签容器”
UIView
的高度值,手动修改了“C”
UIView
约束高度

3rd:在修复前两个步骤后,我忘记设置最后添加的
UIView
约束及其父视图


现在一切正常。

您有多少个n标签?在本例中,我将使用TableView(将该标签用作单元格),然后将a和B视图与容器合并,并将其放入tableHeaderView。这解决了计算中的所有问题。@DejanSkledar标签的数量是可变的,取决于服务器端。添加到“C”
UIView
中的所有
UIView
都比我说的要复杂,它们不仅承载
UILabel
,而且我尽量简化它,只保留它的“动态”部分。。。因此,在这种情况下使用
UITableView
会适得其反。。。这样做的目的是使所有内容都能自动调整大小,所有视图都能自动适应其内容……那么,什么是TableView?具有其他功能的滚动视图。。。其中一个正是您所提到的:“……所有内容都会自动调整大小,所有视图都会自动适应其内容”如果您在故事板中设置容器视图,则将高度约束设置为容器视图,并为其提供出口。添加所有标签后编码中的下一步更改容器视图高度约束“containerConstraint.constant=150”。现在滚动视图自动调整。在ios中搜索大小类并查看此帖子非常感谢您的回答,但您并不完全理解我的布局。A和B是正确的,但是C包含N<代码> UIVIEW/COD>子视图,它们中的每一个都包含M<代码> UIABEL 其他不动态变化的视图…OK,因此,您可以在每个NUIVIEW添加TabLVIEW中使用CoputVIEW视图,这将有助于得到您想要的。我要试试看!谢谢:)已经发布了一些解决方案,在那里你可以