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
,这些容器的高度取决于它们所承载的mUILabel
的内容
现在,我正在使用boundingRectWithSize:
计算nUILabel
的大小,并且我正在调整它们的父“标签容器”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视图,这将有助于得到您想要的。我要试试看!谢谢:)已经发布了一些解决方案,在那里你可以