1

我一直在尝试通过本教程为 UITableView 实现覆盖活动指示器 - http://www.markbetz.net/2010/09/30/ios-diary-showing-an-activity-spinner-over-a-适合视图/

它可能有点旧,但除了显示覆盖的边界的小问题外,它似乎运行良好。

我试图在这里得到这些界限:

-(void)showActivityView {
    if (overlayController == nil) {
        // This is where I get the wrong bounds
        overlayController = [[ActivityOverlayController alloc] initWithFrame:self.tableView.bounds];
    }
    [self.tableView insertSubview:overlayController.view aboveSubview:self.tableView];
}

如果我在加载和填充表格之后调用该方法,但如果我在它得到错误的边界之前调用它,这将获得边界并完美地显示我的叠加层。我试过获取 tableView.superView 的边界,但这只是在左上角显示覆盖。

我知道这是因为 UITableView 在加载之前不包含任何单元格,因此还没有适当的边界,但我不知道如何获取这些单元格。

错误显示:

在此处输入图像描述

正确(但在加载表格后)显示:

在此处输入图像描述

4

2 回答 2

0

根据示例链接,您应该这样做

-(void)showActivityView {
    if (overlayController == nil) {
        // This is where I get the wrong bounds
        overlayController = [[ActivityOverlayController alloc] initWithFrame:self.tableView.superview.bounds];
    }
    [self.tableView.superview insertSubview:overlayController.view aboveSubview:self.tableView];
}  

你为什么要做[self.tableView insertSubview:..]而不是[self.tableView.superview insertSubview:..]

于 2012-08-04T12:59:14.480 回答
0

使用 UITableView 的“frame”属性而不是“bounds”怎么样?如果表格视图是在 XIB 中定义的,那么在将单元格加载到表格中之前,框架应该已经很好了。所以你需要更换:

    overlayController = [[ActivityOverlayController alloc] initWithFrame:self.tableView.bounds];

和:

    overlayController = [[ActivityOverlayController alloc] initWithFrame:self.tableView.frame];
于 2012-08-04T11:55:13.540 回答