将活动指示器视图集中到UITableView

时间:2013-12-20 03:02:18

标签: ios objective-c uitableview

我在我的故事板中创建了一个UITableViewController,然后将一个活动指示器视图拖到控制器中(同时为它创建一个插座),我在一些json内容加载之前和之后开始和停止动画。< / p>

我可以看到ajax微调器工作正常,但它在我的导航器/标题区域下方可视地显示,当我尝试将其居中时,它显示为居中宽度,显示在状态区域附近的顶部...

我尝试了以下内容以试图将其集中......以下是我viewDidLoad的快速浏览:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.listLoader.center = CGPointMake( [UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2);
    UITableView *appDelegate = (UITableView *)[[UIApplication sharedApplication] delegate];
    [appDelegate.window addSubview:self.listLoader];

    self.operationQueue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(getPosts) object:nil];
    [self.operationQueue addOperation:operation];
}

请注意,我的startAnimatingstopAnimating都包含在我的getPosts方法中,并在主要主题上执行。所以,为了避免混淆,我实际上可以看到微调器,它只是一直进入状态区域。事实上,如果我删除线......

self.listLoader.center = CGPointMake( [UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2);
UITableView *appDelegate = (UITableView *)[[UIApplication sharedApplication] delegate];
[appDelegate.window addSubview:self.listLoader];

微调框出现在导航栏的正下方......

我究竟如何居中?我认为上面的方法可行,但显然它不起作用......

3 个答案:

答案 0 :(得分:3)

你遇到的问题是UITableViewController处理单个tableView,tableViews是根据内容而改变的特殊滚动视图。向tableviews添加内容非常罕见,这就是您使用原型单元格并更改这些单元格的原因。没有“不吉利”的方式来做到这一点。

执行此操作的正确方法是,使用具有tableview的普通ViewController和带指示符的视图。然后使viewcontroller符合数据源并委托处理tableview的协议。

如果您仍想使用tableviewcontroller,那么这种方法就不那么容易了:

UITableView Activity Indicator the Apple way

答案 1 :(得分:1)

UIView上放一个ViewController,大小与UITableView的大小完全相同。

UITableView放在UIView上。正确调整大小。

现在,拖动UIActivityIndicator。将其设为UIView的子视图,但在视图列表中的UITableView下方(因此它会在表格上绘制)。现在找到将它居中的x / y并在设置中手动添加这些数字(在故事板上)。

答案 2 :(得分:1)

我遇到过的最好的事情:

// Center 
CGFloat x = UIScreen.mainScreen.applicationFrame.size.width/2;
CGFloat y = UIScreen.mainScreen.applicationFrame.size.height/2;
// Offset. If tableView has been scrolled
CGFloat yOffset = self.tableView.contentOffset.y;
self.activityView.frame = CGRectMake(x, y + yOffset, 0, 0);

定义如下: IOS: ActivityIndicator over UITableView... How to?

主要的是如何获得当前可见滚动区域的中心,上面的代码就是这样,之后您可以轻松定位进度视图窗口。

这很简单,没有黑客解决方案。