我在故事板上有这个结构(我添加了一些示例名称以便于理解):
UIView (主视图)" BlackView"
- UIScrollView (在主视图内)" OrangeView"
我想要的是什么?我想要一个与行数成比例增长的表(行高固定为60)。我还想要一个UIScrollview,它在content_size中增长,并相应地滚动到BlueView和RedView的高度之和。
自动布局约束是:
UiScrollView" OrangeView":(前0位,后0位,后0位,领先0位)
UIView" YelloView":(前0名,尾随0,名列前0,领先0)(等于主编辑的高度等于主编号#34; BlackView&#34 ;,优先级“低”为底部)
UITabelView" BluView":(前0名,尾随0,领先0)
UIView" RedView":(垂直空间2到" BluView",尾随0,领先0,底部0到YelloView)
我从视图的顶部到底部有一个完整的约束链。 UITableView是免费增长的,因为我没有直接设置他的"身高"约束和uitableview setscrollingenabled为FALSE。结果是一张不会增长的桌面视图。
我可以通过代码产生增长:
Table.frame=CGRectMake(BluView.frame.origin.x, BluView.frame.origin.y, BluView.frame.size.width, BluView.contentSize.height);
我工作,桌架和" OrangeView"滚动content_size正确增长,但" RedView"没有回应这个框架更改,它没有移动到新的桌子底部"广告2的距离。
我已经尝试刷新约束系统:
[BlackView layoutIfNeeded];
[BlackView setNeedsUpdateConstraints];
[RedView layoutIfNeeded];
[ScrollContainer layoutIfNeeded];
[RedView layoutIfNeeded];
[RedView setNeedsUpdateConstraints];
[OrangeView setNeedsUpdateConstraints];
[RedView updateConstraints];
[OrangeView updateConstraints];
[BlackView updateConstraints];
[BluView setTranslatesAutoresizingMaskIntoConstraints:NO];
[RedView setTranslatesAutoresizingMaskIntoConstraints:NO];
我在适当的帧更改之前和之后调用了这些方法,它们没有刷新RedView的y位置。我怎样才能获得理想的行为?有一种方法可以创建另一种类型的" costraints tree"或者在我以编程方式更改Tableview框架后,还有另一种刷新RedView位置的方法吗?
答案 0 :(得分:1)
UITableView是免费增长的,因为我没有直接设置他的"身高"约束和uitableview setscrollingenabled为FALSE。
将setscrollingenabled
设置为false并不会告诉tableView具有其内容的高度,它只是禁用滚动行为。因此,如果您的tableView高度为200pt且内容为500pt,那么您将永远不会看到底部的300pt。
为tableView添加一个高度约束,并在每次contentSize.height
更改时使用tableView' contentSize
更新其常量。
这样它总是会有内容的大小,因为它在scrollView中你仍然可以滚动查看所有内容。
PS:如果黄色视图只是蓝色和红色视图的容器,则黄色视图无用。