代码之家  ›  专栏  ›  技术社区  ›  user31929

自动布局,UiScrollView内部的UITableView不增长

  •  1
  • user31929  · 技术社区  · 7 年前

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

    • UIView视图 (主视图)“BlackView”

      - UIScrollView (主视图内)“OrangeView”

      • UIView视图 “YelloView”(主卷轴内的ContentView)
        • UITableView “BluView”(contentView内部和顶部)
        • UIView视图 “RedView”(位于ContentView内部,与UITableview处于同一级别)

    我想得到什么?我想要一个与他的行数成比例增长的表(行高固定为60)。我还想要一个UIScrollview,它可以根据BlueView和RedView的高度和相应地增加content\u大小和滚动能力。

    自动布局约束包括:

    UiScrollView“OrangeView”: (顶部0,尾部0,底部0,前导0)

    UIView“YelloView”: (顶部0,尾部0,底部0,前导0)(与主ed等宽,与主“BlackView”等高,底部优先级低)

    UITabelView“BluView”: (顶部0,尾部0,前导0)

    UIView“RedView”: (垂直空格2到“BluView”,尾随0,前导0,底部0到YelloView)

    我有一个从视图顶部到底部的完整约束链。UITableView可以自由增长,因为我没有直接设置他的“高度”约束,而UITableView设置CrollingEnabled为FALSE。结果是一个不增长的tableview。

    我可以按代码生成增长:

    Table.frame=CGRectMake(BluView.frame.origin.x, BluView.frame.origin.y, BluView.frame.size.width, BluView.contentSize.height);
    

    我工作了,表格框架和“OrangeView”滚动内容大小正确增长,但“RedView”不响应此框架更改,也不移动到距离的新“table bottom”ad 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];
    

    我在uitable帧更改前后调用了这些方法,它们不会刷新红色视图的y位置。我怎样才能获得想要的行为?有一种方法可以创建另一种类型的“costraints树”,或者有另一种方法可以在以编程方式更改Tableview框架后刷新RedView的位置?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Imotep    7 年前

    UITableView可以自由增长,因为我没有直接设置他的“高度”约束,而UITableView设置CrollingEnabled为FALSE。

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

    向tableView添加高度约束,并使用tableView的 contentSize.height 每次 contentSize 变化。 这样,它将始终具有其内容的大小,并且因为它位于滚动视图中,所以您仍然可以滚动查看所有内容。

    注:如果黄色视图只是蓝色和红色视图的容器,那么它在这里是无用的。