【问题标题】:UIActivityIndicatorView floating above a UITableViewUIActivityIndi​​catorView 浮动在 UITableView 之上
【发布时间】:2015-04-18 08:08:19
【问题描述】:

我有一个 UIActivityIndi​​catorView 用于刷新我的桌子上的内容,它在视图中居中,如下所示:

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

但是,在它与表格一起滚动的那一刻,是否可以让它漂浮在表格上方,以便在用户滚动时保持居中?我尝试将其添加到表超级视图中,但没有奏效。任何指针将不胜感激!谢谢

【问题讨论】:

  • 什么是表超级视图?你在使用表格视图控制器吗?导航栏是否适合您?
  • 将其添加到视图后尝试将其带入视图
  • @Wain 我以前从未考虑过使用导航栏。实现起来难吗?

标签: ios uitableview uiactivityindicatorview


【解决方案1】:

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

例如,以下是我在其中一个应用中的导航控制器上实现子视图的方法:

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

【讨论】:

  • 这是一个很好的技巧,适用于 UITableViewController,也适用于以编程方式添加的约束。只需在约束中使用 navigationcontroller.view 即可!
【解决方案2】:

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

【讨论】:

  • 谢谢你,尝试了其他方法,似乎这是唯一的方法。我想我以后会远离 UITableVIew 控制器。与内置表格的标准 UIVIewController 相比,它有什么优势吗?
  • @KexAri 不,UITableViewControllerUIViewController 获得继承,因此您不会丢失任何东西,实际上您获得了更多的灵活性。当我也陷入困境然后不得不重做我的表格视图时,我很早就学会了这一点......
  • 是的,你失去了很多功能。 UITableViewController 所做的只是让您不必手动连接数据源和委托。
【解决方案3】:
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] 
   initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
  spinner.center = CGPointMake(160, 240);
  spinner.hidesWhenStopped = YES;
  [self.view addSubview:spinner];
  [spinner startAnimating

];

【讨论】:

    【解决方案4】:

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

    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;
    

    【讨论】:

    • 我试过了,没有错误信息,但指示器根本不显示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多