我在故事板上有这个结构(我添加了一些示例名称以非常理解(:
-
uiview (主视图(" blackview"
- uiscrollview (在主视图中("橙色"
-
uiview " yelloview"(主滚动中的contentView(
- uitaiteView " bluview"(内部和contentview的顶部(
- uiview " redview"(在内容视图内部和相同级别的Uaithitview(
-
uiview " yelloview"(主滚动中的contentView(
我想实现什么?我想要一张与他的行号相称生长的桌子(行高度固定为60(。我还想要一个在content_size和滚动功能中增长到blueview和redview的高度之和的uiscrollview。
自动划分约束是:
UISCROLLVIEW" OrangeView":(顶部0,尾随0,底部0,领先0(
uiview" yelloview":(top 0,尾巴0,底部0,底部0,领先0((相等宽度与主eD等于主的高度与main" blackview",底部优先级"低"(<(
uitabelView" bluview":(顶部0,尾随0,领先0(
在我有一个从视图的顶部到底部的完整约束链。uitableview可以免费成长,因为我没有直接设置他的"高度"约束,而uitableview setScrollingEnabled是错误的。结果是一个不会生长的表观视图。
我可以通过代码生成生长:
Table.frame=CGRectMake(BluView.frame.origin.x, BluView.frame.origin.y, BluView.frame.size.width, BluView.contentSize.height);
i工作,表格和"橙色"滚动content_size正确生长,但是" redview"不响应此帧的更改,并且不会移动到距离的新"表底部" AD 2。p>我已经尝试刷新约束系统的内容:
[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树",或者可能还有另一种方法可以在我编程上更改tableview框架之后刷新Redview的位置?
uitaiteView可以免费生长,因为我没有直接设置他的"高度"约束,而Uaithitview SetScrollingEnabled是错误的。
将setscrollingenabled
设置为False不会告诉TableView具有其内容的高度,它只是禁用滚动行为。因此,如果您的桌面视图高200点,并且您的内容为500pt,那么您将永远不会在底部看到300pt。
每次contentSize
更改时,在表观视图中添加一个高度约束,并使用TableView的contentSize.height
更新其常数。这样,它将始终具有其内容的大小,并且由于它在scrollview中,您仍然可以滚动查看所有内容。
ps:如果它只是蓝色和红色视图的容器,那么黄色的视图是无用的。