使用动态高度子视图使UIScrollView自动使用自动布局

时间:2017-04-26 10:50:40

标签: 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 "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的内容。

现在,我正在使用UILabel计算 n boundingRectWithSize:的大小,我正在调整其父级"标签容器的高度" UIView它被添加到内部" C" UIView将其高度限制设置为所有UILabel的总和。

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

这适用于所有不同的屏幕尺寸,纵向和横向。 UIScrollView显示所有三个" A"," B"和" C"子视图,有" C"托管 m UIView n UILabel

但是现在我在旋转设备时遇到了麻烦。我面临的问题是,我必须重新计算所有UILabel的大小,以更改所有"标签容器的高度限制" UIView并更改" C" UIView高度约束,以便它可以适合所有视图之间没有大空格的所有内容。

所以我的问题是:如何使用Auto Layout专门实现相同的行为?

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

提前谢谢!

2 个答案:

答案 0 :(得分:1)

据我所知,您需要为动态标签添加TableView,为此,您必须按照以下步骤操作:

1step:ScrollView中添加ViewController

2step:在ScrollView中添加ContainerView以管理滚动constrains

3step:添加固定大小的“ A ”视图,例如150px。

4step:添加固定大小的“ B ”视图,例如150px。

5step:为固定大小为0px的动态标签添加TableView。在此步骤中,制作tableView高度Constrains的出口,我们将在下一步中使用它。

6step:致电您的服务并在tableView中添加标签。

在此第6个步骤中,当您在表格视图中添加标签时,意味着在重新加载tableView时,请执行以下动态高度限制代码

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

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包含大小。

显示示例图片:

enter image description here enter image description here enter image description here

查看约束堆栈:

enter image description here

现在根据您的评论,您必须添加CollectionView代替tableView,并在TableView中添加CollectionViewCell,并使用您的具体设计。

希望这会有所帮助!

答案 1 :(得分:0)

好的,我做错了三件事:

1st:我正在计算标签的高度,然后设置"标签容器的大小" UIView使用高度约束。 Auto Layout管理所有内容时不需要高度限制。

第二名:我正在通过添加每个"的高度值来手动修改" C" UIView约束高度。标签容器" UIView已添加。

第3名:修复前两个步骤后,我忘了用其父视图设置最后添加的UIView约束...

现在一切都按预期工作了。