如何集中UIActivityIndi​​cator?

已解决:请检查下面的解决scheme,我的问题。

在这里输入图像说明

嘿所以,

我无法将UIActivityIndi​​cator置于视图的中心。 正如你在这里看到的那样,它在垂直方向上应该比它更远一点。 我有一个UIScrollView,后来添加了一个UIImage子视图。 在UIImage加载之前,我有这个UIActivityIndi​​cator来显示图像正在加载。

- (void)viewDidLoad { [super viewDidLoad]; self.scrollView.backgroundColor = [UIColor blackColor]; UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; spinner.center = self.view.center; [spinner startAnimating]; [self.view addSubview:spinner]; 

关于如何获得中心CGPoint和设置UIActivityIndi​​cator的任何想法? 我不知道为什么self.view.center不起作用。

提前致谢。

编辑:我不得不考虑导航栏和标签栏的高度。 我必须添加的代码是:

 float navigationBarHeight = [[self.navigationController navigationBar] frame].size.height; float tabBarHeight = [[[super tabBarController] tabBar] frame].size.height; spinner.center = CGPointMake(self.view.frame.size.width / 2.0, (self.view.frame.size.height - navigationBarHeight - tabBarHeight) / 2.0); 

在这里输入图像说明

两个问题:

  1. 首先,self.view.center是当前视图在其父框架上的框架的中心。 如果你想要当前视图的中心,你需要CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.height / 2.0);

  2. 其次,您当前的视图不包含导航栏,因此您将其集中在导航栏下面的屏幕空间中。 这也会使它看起来更低。

迅速

由于导航栏和标签栏,我遇到了同样的问题。 为了解决这个问题,把下面的代码放在你的loadView()或者你调用活动指示器的地方开始animation:

 let navigationBarHeight = self.navigationController?.navigationBar.frame.height let tabBarHeight = super.tabBarController!.tabBar.frame.height YourActivityIndicator.center = CGPointMake(self.view.frame.size.width / 2.0, (self.view.frame.size.height - navigationBarHeight! - tabBarHeight) / 2.0) 

使用spinner.center = self.scrollView.center; 代替

尝试这个

spinner.center = CGPointMake(CGRectGetMidX(self.bounds),CGRectGetMidY(self.bounds));

我不确定究竟发生了什么,但是也许你的UIScrollView比屏幕更高? 你可以尝试打印你的UIView的大小,以确定是否在屏幕边界。 也许UIActivityIndi​​cator是UIView的中心(不是屏幕的中心)。

在viewDidLayoutSubviews中设置中心。

  - (void) viewDidLayoutSubviews { self.myActivityIndicator.center = self.view.center; 

}