UIActivityIndi​​catorView 浮动在 UITableView 之上

UIActivityIndicatorView floating above a UITableView

我有一个 UIActivityIndi​​catorView 用于刷新我 table 上的内容,它位于视图的中心,如下所示:

//Start activity indicator
        UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        indicator.center=self.view.center;
        CGRect frame = indicator.frame;
        frame.origin.x = (self.view.frame.size.width / 2 - frame.size.width / 2);
        frame.origin.y = (self.view.frame.size.height / 2 - frame.size.height / 2)-self.navigationController.navigationBar.frame.size.height-20;
        indicator.frame = frame;
        [self.view addSubview:indicator];
        [indicator startAnimating];

但是目前它随着 table 滚动,是否可以让它漂浮在 table 上方,以便在用户滚动时保持居中?我尝试将它添加到 table 超级视图,但是没有用。任何指针将不胜感激!谢谢

您可以将指示器添加到您的 tableView 的超级视图中,但是,如果它不起作用,您还可以在您的应用程序的 UIWindow 上添加 activity 指示器。以下是代码:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; // this gives you the current window of the application.
[keyWindow addSubview:indicator]; // add the indicator on the window.

工作完成后,使用

从 window 中删除 activity 指标
[indicator removeFromSuperView];
indicator = nil;
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] 
   initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
  spinner.center = CGPointMake(160, 240);
  spinner.hidesWhenStopped = YES;
  [self.view addSubview:spinner];
  [spinner startAnimating

];

听起来您正在使用 UITableViewController 如果是这样的话,我建议您改用 UIViewController。这将使您能够在 UITableView 的顶部添加一个 UIView 来容纳您的 UIActivityIndicatorView 您还可以轻松地将它放在情节提要中并将其放置在您想要的位置它不会随着 table 滚动条移动,因为它是它自己的视图。作为一般规则,我尽量不要使用 UITableViewController,因为在这种情况下它会限制你。

您可以添加任何类型的视图 "on top" 任何表视图、导航控制器或任何其他视图,只需通过与您的代码非常相似但具有正确根视图的子视图添加创建的视图。只是让你清楚地识别出想要的根视图。

例如,这是我在我的一个应用程序中的导航控制器顶部实现子视图的方式:

...
[self.navigationController.view addSubview:indicator];
...