Autolayout,UiScrollView中的UITableView不会增长

时间:2018-03-29 15:35:42

标签: ios uitableview autolayout ios-autolayout

我在故事板上有这个结构(我添加了一些示例名称以便于理解):

  • UIView (主视图)" BlackView"

    - UIScrollView (在主视图内)" OrangeView"

    • UIView " YelloView" (主滚动内的ContentView)
      • UITableView " BluView" (在contentView的顶部和顶部)
      • UIView " RedView" (在ContentView内部和UITableview的同一级别)

我想要的是什么?我想要一个与行数成比例增长的表(行高固定为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位置的方法吗?

1 个答案:

答案 0 :(得分:1)

  

UITableView是免费增长的,因为我没有直接设置他的"身高"约束和uitableview setscrollingenabled为FALSE。

setscrollingenabled设置为false并不会告诉tableView具有其内容的高度,它只是禁用滚动行为。因此,如果您的tableView高度为200pt且内容为500pt,那么您将永远不会看到底部的300pt。

为tableView添加一个高度约束,并在每次contentSize.height更改时使用tableView' contentSize更新其常量。 这样它总是会有内容的大小,因为它在scrollView中你仍然可以滚动查看所有内容。

PS:如果黄色视图只是蓝色和红色视图的容器,则黄色视图无用。