3

我在雪豹上使用 Xcode 4.2。我正在尝试做的事情。基本上,我有一个带有表格视图的主视图控制器。为了填充表格视图,我需要调用 API 并从那里下载信息。

从 API 下载数据时,我想显示一个活动指示器,以便让用户知道正在发生某些事情并且应用程序没有卡住。

我所做的是我在表格视图上创建了一个新的 UIView,带有 alpha 0.5,并在其中间放置了一个活动指示器。这是我在主控制器视图加载时执行的代码:

// Show the activity indicator
self.overlayView = [[UIView alloc] init];
self.overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
self.overlayView.frame = self.tableView.frame;
self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
CGRect frame = self.overlayView.frame;
self.activityIndicator.center = CGPointMake(frame.size.width/2, frame.size.height/2);
[self.overlayView addSubview:self.activityIndicator];
[self.activityIndicator startAnimating];
[self.tableView addSubview:self.overlayView];

当从 API 加载数据时,我隐藏了覆盖视图和活动指示器:

[self.activityIndicator removeFromSuperview];
[self.overlayView removeFromSuperview];

它工作正常,但问题是覆盖视图没有正确对齐,它有一个上边距并且看起来不太好。这是它的外观:

在此处输入图像描述

4

1 回答 1

6

不要使用

self.overlayView.frame = self.tableView.frame;

改为使用

self.overlayView.frame = self.tableView.bounds;

看起来你的 tableView 有 origin.y = 20.0f;


其他注意事项

  • UIView的指定初始化程序是initWithFrame:您应该使用它。

  • 你可以简单地这样

      self.activityIndicator.center = CGPointMake(frame.size.width/2, frame.size.height/2);
    

      self.activityIndicator.center = self.overlayView.center;
    
于 2012-04-07T00:08:25.680 回答