当前位置: 首页 > 知识库问答 >
问题:

如何将UITable查看器放置在屏幕底部?

仉昂熙
2023-03-14

UI 表视图中有一到三个 UI 表视图单元格。有没有办法在重新加载数据后始终将单元格放置在屏幕底部?

+----------------+     +----------------+     +----------------+
|                |     |                |     |                |
|                |     |                |     |                |
|                |     |                |     |                |
|                |     |                |     | +------------+ |
|                |     |                |     | |   cell 1   | |
|                |     |                |     | +------------+ |
|                |     | +------------+ |     | +------------+ |
|                |     | |   cell 1   | |     | |   cell 2   | |
|                |     | +------------+ |     | +------------+ |
| +------------+ |     | +------------+ |     | +------------+ |
| |   cell 1   | |     | |   cell 2   | |     | |   cell 3   | |
| +------------+ |     | +------------+ |     | +------------+ |
+----------------+     +----------------+     +----------------+

共有3个答案

邹桐
2023-03-14

您可以在表格视图中设置一个标题,并使其高度足以向下推第一个单元格。然后相应地设置tableView的contentOffset。我不认为有一个快速的内置方法来做到这一点。

孔嘉茂
2023-03-14

每当添加一行时调用此方法:

- (void)updateContentInset {
    NSInteger numRows=[self tableView:_tableView numberOfRowsInSection:0];
    CGFloat contentInsetTop=_tableView.bounds.size.height;
    for (int i=0;i<numRows;i++) {
        contentInsetTop-=[self tableView:_tableView heightForRowAtIndexPath:[NSIndexPath indexPathForItem:i inSection:0]];
        if (contentInsetTop<=0) {
            contentInsetTop=0;
            break;
        }
    }
    _tableView.contentInset = UIEdgeInsetsMake(contentInsetTop, 0, 0, 0);
}
谢锦程
2023-03-14

我已经创建了一个新的示例解决方案,因为以前的答案对于现代使用来说并没有过时。

最新的技术使用自动布局和自调整单元格大小,因此之前的答案将不再有效。我重新设计了解决方案以使用现代功能,并创建了一个示例项目以放在GitHub上。

这个代码不是计算每一行的高度,这会导致额外的工作,而是获取最后一行的框架,这样就可以计算从顶部插入的内容。它利用了表格视图已经在做的事情,所以不需要额外的工作。

此代码也仅在为键盘或其他叠加层设置底部插图时才设置顶部插图。

请在 GitHub 上报告任何错误或提交改进,我将更新此示例。

GitHub:https://github.com/brennanMKE/BottomTable

- (void)updateContentInsetForTableView:(UITableView *)tableView animated:(BOOL)animated {
    NSUInteger lastRow = [self tableView:tableView numberOfRowsInSection:0];
    NSUInteger lastIndex = lastRow > 0 ? lastRow - 1 : 0;

    NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:lastIndex inSection:0];
    CGRect lastCellFrame = [self.tableView rectForRowAtIndexPath:lastIndexPath];

    // top inset = table view height - top position of last cell - last cell height
    CGFloat topInset = MAX(CGRectGetHeight(self.tableView.frame) - lastCellFrame.origin.y - CGRectGetHeight(lastCellFrame), 0);

    UIEdgeInsets contentInset = tableView.contentInset;
    contentInset.top = topInset;

    UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState;
    [UIView animateWithDuration:animated ? 0.25 : 0.0 delay:0.0 options:options animations:^{
        tableView.contentInset = contentInset;
    } completion:^(BOOL finished) {
    }];
}
 类似资料:
  • 问题内容: 设置网页的最佳做法是什么,以便在该网页上显示的内容/文本很少的情况下,页脚显示在浏览器窗口的底部,而不是显示在网页的中途? 问题答案: 您正在寻找的是 CSS Sticky Footer 。

  • 我的xib布局喜欢在绘图下,除了“c”的高度常数之外,我还设置了从“a”到“b”到...“e”的约束,以便可以确定单元格的高度。有时“c”会隐藏,因为一些原因,我将高度常数更改为零,并在标签内容可见时按实际高度更改。 但有一个自动布局警告让我发疯 我也很想了解为什么会发生这种情况

  • 问题内容: 鉴于以下HTML: 我想坚持到底。 不使用绝对定位就可以实现吗?如果float属性支持’bottom’的值,那似乎可以解决问题,但是不幸的是,事实并非如此。 问题答案: 可能不会。 分配给,然后分配给。

  • 问题内容: 我是.Net开发人员,但出于某种原因,我不知为何要用java创建一个简单的应用程序。我能够创建该应用程序,但是我的问题是启动应用程序时如何在屏幕上居中放置表单? 这是我的代码: 上面的代码工作正常,但问题是我已经看到表格从最左上角移到中间屏幕。我还尝试在事件中添加该代码,但仍显示相同的操作。有更好的方法吗?就像里面有一个。还是如果上面的代码正确,我将在哪个事件上放? 感谢您阅读本文。

  • 问题内容: 嗨,我正在使用类似于以下内容的方法来将div定位在屏幕中间: 但是,这样做的问题是它将项目放置在页面的中间而不是屏幕的中间。因此,如果页面高了几个屏幕,而我使div出现时,我就位于页面的顶部(该部分的顶部显示在屏幕上)。您必须向下滚动才能查看它。 有人可以告诉我您如何将其显示在屏幕中间吗? 问题答案: 只需添加即可,即使您向下滚动也可以看到它。

  • 问题内容: 我有此功能可将对象居中放在屏幕中间。 我想居中QMainWindow,QInputDialog和QMessageBox。 这是我的MessageBox: 这是我的QInputDialog: 这是我的中心功能: 我只能居中QMainWindow。 逻辑是将对象移动到topLeft点(screenWidth / 2-objectWidth / 2,screenHeight / 2-obje