UITableView内容高度

发布于 2024-12-10 11:09:54 字数 245 浏览 2 评论 0原文

我有一个 UITableView 设置为不启用滚动,并且它存在于 UIScrollView 中。我这样做是因为设计规范要求看起来像表格视图的东西(实际上有两个并排),并且实现表格视图比添加一大堆按钮要容易得多,(分组表视图)。

问题是,我需要知道滚动视图的容器视图有多大,以便它滚动表视图的整个高度。加载后,有什么方法可以找到桌面视图的高度吗?没有像滚动视图这样的 contentView 属性,框架似乎是静态的等等......

有什么想法吗?

I have a UITableView that is set to not enable scrolling, and it exists in a UIScrollView. I'm doing it this way as the design specs call for something that looks like a table view, (actually there are two of them side by side), and it would be much easier to implement tableviews rather than adding a whole bunch of buttons, (grouped table views).

Question is, I need to know how big to make the container view for the scrollview, so it scrolls the whole height of the table views. Once loaded, is there any way to find the height of a tableview? There is no contentView property like a scroll view, frame seems to be static, etc...

Any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁月静好 2024-12-17 11:09:54

使用

CGRect lastRowRect= [tableView rectForRowAtIndexPath:index_path_for_your_last_row];
CGFloat contentHeight = lastRowRect.origin.y + lastRowRect.size.height;

然后您可以使用 contentHeight 变量来设置滚动视图的 contentSize。

Use

CGRect lastRowRect= [tableView rectForRowAtIndexPath:index_path_for_your_last_row];
CGFloat contentHeight = lastRowRect.origin.y + lastRowRect.size.height;

You can then use the contentHeight variable to set the contentSize for the scrollView.

只等公子 2024-12-17 11:09:54

一个更适合我的通用解决方案:

CGFloat tableViewHeight(UITableView *tableView) {
    NSInteger lastSection = tableView.numberOfSections - 1;
    while (lastSection >= 0 && [tableView numberOfRowsInSection:lastSection] <= 0)
        lastSection--;
    if (lastSection < 0)
        return 0;
    CGRect lastFooterRect = [tableView rectForFooterInSection:lastSection];
    return lastFooterRect.origin.y + lastFooterRect.size.height;
}

除了安德烈的解决方案之外,它还考虑了空白部分和部分页脚。

A more general solution that works for me:

CGFloat tableViewHeight(UITableView *tableView) {
    NSInteger lastSection = tableView.numberOfSections - 1;
    while (lastSection >= 0 && [tableView numberOfRowsInSection:lastSection] <= 0)
        lastSection--;
    if (lastSection < 0)
        return 0;
    CGRect lastFooterRect = [tableView rectForFooterInSection:lastSection];
    return lastFooterRect.origin.y + lastFooterRect.size.height;
}

In addition to Andrei's solution, it accounts for empty sections and section footers.

沧桑㈠ 2024-12-17 11:09:54

UITableViewUIScrollView 的子类,因此它有一个 contentSize 属性,您应该能够使用它没有问题:

CGFloat tableViewContentHeight = tableView.contentSize.height;
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, tableViewContentHeight);

但是,如 几个 其他 SO问题指出,当您对表视图进行更新(如插入行)时,其 contentSize 似乎不会像 UIKit 中大多数其他动画调整大小那样立即更新。在这种情况下,您可能需要求助于迈克尔·曼纳的答案。 (尽管我认为在 UITableView 上作为一个类别实现更有意义)

UITableView is a subclass of UIScrollView, so it has a contentSize property that you should be able to use no problem:

CGFloat tableViewContentHeight = tableView.contentSize.height;
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, tableViewContentHeight);

However, as several other SO questions have pointed out, when you make an update to a table view (like inserting a row), its contentSize doesn't appear to be updated immediately like it is for most other animated resizing in UIKit. In this case, you may need to resort to something like Michael Manner's answer. (Although I think it makes better sense implemented as a category on UITableView)

梦言归人 2024-12-17 11:09:54

您可以遍历这些部分并使用 rectForSection 来计算总高度(这也包括页脚和页眉!)。我很快在 UITableView 上使用了以下扩展

extension UITableView {
    /**
     Calculates the total height of the tableView that is required if you ware to display all the sections, rows, footers, headers...
     */
    func contentHeight() -> CGFloat {
        var height = CGFloat(0)
        for sectionIndex in 0..<numberOfSections {
            height += rectForSection(sectionIndex).size.height
        }
        return height
    }

}

You can run over the sections and use the rectForSection to calculate the total height (this included footer and header as well!). In swift I use the following extension on UITableView

extension UITableView {
    /**
     Calculates the total height of the tableView that is required if you ware to display all the sections, rows, footers, headers...
     */
    func contentHeight() -> CGFloat {
        var height = CGFloat(0)
        for sectionIndex in 0..<numberOfSections {
            height += rectForSection(sectionIndex).size.height
        }
        return height
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文