Ios UIActivityIndicator视图浮动在UITableView上方

Ios UIActivityIndicator视图浮动在UITableView上方,ios,uitableview,uiactivityindicatorview,Ios,Uitableview,Uiactivityindicatorview,我有一个UIActivityIndicator视图用于刷新表上的内容,它在视图中居中,如下所示: //Start activity indicator UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; indicator.center=self.

我有一个UIActivityIndicator视图用于刷新表上的内容,它在视图中居中,如下所示:

//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];

然而,当它与表格一起滚动时,是否有可能使它浮在表格上方,以便在用户滚动时保持居中?我尝试将其添加到表superview中,但没有成功。任何指点都将不胜感激!谢谢

您可以将指示器添加到tableView的超级视图中,但是,如果不起作用,您也可以在应用程序的UI窗口中添加活动指示器。代码如下:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; // this gives you the current window of the application.
[keyWindow addSubview:indicator]; // add the indicator on the window.
工作完成后,使用从窗口中移除活动指示器

[indicator removeFromSuperView];
indicator = nil;

您可以将指示器添加到tableView的超级视图中,但如果不起作用,还可以在应用程序的UI窗口中添加活动指示器。代码如下:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; // this gives you the current window of the application.
[keyWindow addSubview:indicator]; // add the indicator on the window.
工作完成后,使用从窗口中移除活动指示器

[indicator removeFromSuperView];
indicator = nil;
])


])

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

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

您可以在任何tableview、导航控制器或任何其他视图的“顶部”添加任何类型的视图,只需通过与您的代码非常类似的子视图添加创建的视图,但使用正确的根视图即可。只需清楚地标识所需的根视图

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

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

只需通过与代码非常类似的子视图添加创建的视图,但使用正确的根视图,就可以在任何tableview、导航控制器或任何其他视图的“顶部”添加任何类型的视图。只需清楚地标识所需的根视图

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

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

什么是表格超级视图?您正在使用表视图控制器吗?导航栏是否适合您选择?将其添加到后,请尝试将SubViewToFrontview@Wain我以前从未考虑过使用导航栏。很难实现吗?什么是表格超级视图?您正在使用表视图控制器吗?导航栏是否适合您选择?将其添加到后,请尝试将SubViewToFrontview@Wain我以前从未考虑过使用导航栏。这很难实现吗?谢谢你,尝试了其他方法,似乎这将是唯一的方法。我想我将来会远离UITableVIew控制器。与内置表格的标准UIVIewController相比,它有什么优势吗?@KexAri否,
UITableViewController
UIVIewController
继承而来,因此您不会损失任何东西,事实上,您获得了更大的灵活性。我很早就学到了这一点,当时我也陷入困境,然后不得不重做我的表视图……是的,你失去了很多功能。UITableViewController所做的只是防止您必须手动连接数据源和委派。为此,尝试了其他方法,似乎这将是唯一的方法。我想我将来会远离UITableVIew控制器。与内置表格的标准UIVIewController相比,它有什么优势吗?@KexAri否,
UITableViewController
UIVIewController
继承而来,因此您不会损失任何东西,事实上,您获得了更大的灵活性。我很早就学到了这一点,当时我也陷入困境,然后不得不重做我的表视图……是的,你失去了很多功能。UITableViewController所能做的就是防止您手动连接数据源和委派。我尝试了这个,没有错误消息,但指示器根本不显示我尝试了这个,没有错误消息,但指示器根本不显示这是一个很好的提示,适用于UITableViewController,也适用于以编程方式添加的约束。只需在约束中使用navigationcontroller.view,它就可以工作了!这是一个很好的技巧,适用于UITableViewController,也适用于以编程方式添加的约束。只需在约束中使用navigationcontroller.view,它就可以工作了!