已解决:请检查以下解决问题的方法。
嘿SO,
我无法将UIActivityIndicator置于视图中心。正如你在这里看到的那样,它在垂直方向上比它应该更远。我所拥有的是一个UIScrollView,后来添加了一个UIImage子视图。在加载UIImage之前,我有这个UIActivityIndicator来显示图像正在加载。
- (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并在那里设置UIActivityIndicator的任何想法?我不确定为什么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);
答案 0 :(得分:7)
两个问题:
首先,self.view.center是当前视图框架在其父框架上的中心。如果您想要当前视图的中心,则需要CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.height / 2.0);
其次,您当前的视图不包含导航栏,因此您将其置于导航栏下方屏幕的空间中心。这也会让它看起来更低。
答案 1 :(得分:5)
<强> SWIFT 强>
由于导航栏和标签栏,我遇到了同样的问题。要修复此问题,请将以下代码放在loadView()中或在您调用活动指示符的任何位置开始制作动画:
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)
答案 2 :(得分:4)
使用spinner.center = self.scrollView.center;代替
试试这个
spinner.center = CGPointMake(CGRectGetMidX(self.bounds),CGRectGetMidY(self.bounds));
答案 3 :(得分:3)
我不确定究竟发生了什么,但也许您的UIScrollView比屏幕更高?您可以尝试打印UIView的大小以确定是否在屏幕范围内。也许UIActivityIndicator位于UIView的中心(不是屏幕的中心)。
答案 4 :(得分:0)
在viewDidLayoutSubviews中设置中心。
- (void) viewDidLayoutSubviews {
self.myActivityIndicator.center = self.view.center;
}