【问题标题】:UIContainerView height of content (embedded UITableViewController)UIContainerView 内容高度(内嵌 UITableViewController)
【发布时间】:2015-02-09 14:25:24
【问题描述】:

我目前在 Interface Builder 的 UIContainerView 中嵌入了一个 UITableViewController。有没有办法将 UIContainerView 的高度设置为内容的高度(使用原型单元格)?基本上,我想要的是在我的 UIContainerView 周围有一个 UIScrollView,并为我的 UIContainerView 设置一些 AutoLayout 规则,以便根据内部单元格的数量计算高度,并且父 UIScrollView 相应地调整其滚动区域。

编辑

感谢出色的答案,最终使用以下代码更改了框架高度:

    alarmsTableViewController.view.layoutIfNeeded()
    println(alarmsTableViewController.tableView.contentSize.height)
    alarmsContainerView.frame.size.height = alarmsTableViewController.tableView.contentSize.height

【问题讨论】:

    标签: ios swift interface-builder autolayout


    【解决方案1】:

    需要编程干预:UITableViews 当然是 UIScrollViews,嵌套的滚动视图不能在 AutoLayout 中调整自己的大小。这是一个合理的歧义,因为 AutoLayout 不知道使框架更小并需要更多滚动,或者框架更大而滚动更少。在您的情况下,您希望后者不滚动。

    解决这个问题的最简单方法是为 TableView(或其容器视图)的高度创建一个约束。这将作用于 tableView 的框架,如果在任何方向上设置为大于内容大小(仅在 tableviews 中垂直),滚动视图将不会滚动。最好在包含 tableView 的视图中添加/修改它。然后访问表视图的 contentSize 属性。实际代码很简单:

    -(void)updateViewConstraints {
        self.tableViewHeightLayoutConstraint.constant = self.tableviewInMyScrollView.contentSize.height;
        [super updateViewConstraints];
    }
    

    如果滚动视图中的其他所有内容的高度和宽度在 AutoLayout 引擎运行时已固定,则应自动调整滚动视图的大小以适应其内容。

    【讨论】:

    • 感谢您的精彩解释。最终直接覆盖了框架,因为我的带有 tableView 的 containerView 已经在 tableFooterView 中(哇,复杂的东西:])。查看我的编辑。
    • 嗯,通常一个硬性的建议是 setFrame 不会为布局约束提供信息。但是这个scrollviews-in-scrollviews是一个非常不稳定的区域,甚至在tableFooterView的最后一个细节之前,它可能正在做一些事情来获取这些信息,很高兴我能提供帮助。
    • 好吧,因为我没有将 setFrame 高度值提供给布局约束(因为这在 tableFooterView 中实际上是不可能的),这一切都很好:) 谢谢!
    【解决方案2】:

    我在我的项目中所做的是在 ViewController 上的 -(void)updateViewConstraints 内更新由 IBOutlet 给出的约束,具体取决于 tableView 内的单元格数量。例如:

    -(void)updateViewConstraints{
       float newHeigh = ([self.array count] + 1) * 84;
       self.topViewHeightConstraint.constant = newHeigh + 540;
       [super updateViewConstraints];
    }
    

    【讨论】:

    • 感谢您的回答。我考虑过使用单元格的高度来计算,但由于现在使用自动布局来计算单元格高度要容易得多,所以我发现这个解决方案有点脆弱。最终使用了 tableView 的 contentSize。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2016-05-12
    • 2015-04-07
    • 2011-12-09
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多