【问题标题】:I am trying to center UIActivityIndicatorView over a UITableView but it has top margin我正在尝试将 UIActivityIndi​​catorView 居中在 UITableView 上,但它具有上边距
【发布时间】:2012-04-07 08:13:41
【问题描述】:

我在 Snow Leopard 上使用 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];

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

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案1】:

    不要使用

    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;
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多