首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Activity Indicator视图居中到UITableView

将Activity Indicator视图居中到UITableView
EN

Stack Overflow用户
提问于 2013-12-20 11:02:18
回答 3查看 13.6K关注 0票数 4

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

我可以看到ajax微调器工作得很好,但它显示在导航器/标题区域的正下方,当我试图将它居中时,它显示在宽度方向的中心,出现在状态区域附近的最上方……

我尝试了下面的方法,试图将它放在中心。下面快速浏览一下我的viewDidLoad

代码语言:javascript
复制
- (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方法中,并在主线程上执行。因此,为了避免混淆,我实际上可以看到微调器,它只是一直进入状态区域。事实上如果我去掉这些线..。

代码语言:javascript
复制
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];

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

我到底该怎么对中这个?我认为上面的方法会起作用,但显然它不起作用……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-20 12:41:22

问题是UITableViewController只处理一个tableView,tableViews是一种特殊的滚动视图,它会根据内容的不同而变化。向表视图添加内容非常少见,这就是为什么您使用原型单元并更改这些单元的原因。没有"unhacky“的方法可以做到。

正确的做法是,拥有一个带有表视图的普通ViewController,以及一个带有指示器的视图。然后使视图控制器符合处理表视图的数据源和委托协议。

如果你仍然想使用tableviewcontroller,这是一种不那么麻烦的方法:

UITableView Activity Indicator the Apple way

票数 3
EN

Stack Overflow用户

发布于 2013-12-20 11:06:23

UIView放在ViewController上,大小与您希望的UITableView大小完全相同。

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

现在,将UIActivityIndicator拖入。使其成为UIView的子视图,但位于视图列表中的UITableView之下(这样它就被绘制在表的上方)。现在找到将其居中的x/y,并在设置中手动添加这些数字(在故事板上)。

票数 1
EN

Stack Overflow用户

发布于 2016-04-03 22:54:05

我见过的最好的:

代码语言:javascript
复制
// 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?

主要的事情是如何获得当前可见滚动区域的中心,上面的代码恰好让你做到这一点,之后你可以很容易地定位你的进度视图窗口。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20695621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档