我有以下视图结构及其约束:
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
会自动调整大小以适应内容。
提前谢谢!
答案 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包含大小。
显示示例图片:
查看约束堆栈:
现在根据您的评论,您必须添加CollectionView
代替tableView
,并在TableView
中添加CollectionViewCell
,并使用您的具体设计。
希望这会有所帮助!
答案 1 :(得分:0)
好的,我做错了三件事:
1st:我正在计算标签的高度,然后设置"标签容器的大小" UIView
使用高度约束。 Auto Layout
管理所有内容时不需要高度限制。
第二名:我正在通过添加每个"的高度值来手动修改" C" UIView
约束高度。标签容器" UIView
已添加。
第3名:修复前两个步骤后,我忘了用其父视图设置最后添加的UIView
约束...
现在一切都按预期工作了。