iOS:UIActivityIndi​​cator不会与弹簧和支柱保持距离底部

时间:2014-07-15 12:24:07

标签: ios objective-c

我正在尝试在屏幕上设置一个UIActivityIndicator,它必须与屏幕底部保持相同的距离(适用于3.5和4英寸的iPhone)。 UIActivityIndicator将作为subView的{​​{1}}放置,其目的是阻止用户互动。

这是我的代码,但它不起作用:

blockerView

2 个答案:

答案 0 :(得分:1)

如果您的问题是它与4英寸的底部距离与3.5英寸屏幕的距离不同,则需要从底部进行初始计算,您的目前是从顶部开始。

创建视图控制器时,其视图的大小默认为屏幕的大小。因为在你的设置中你做了一个338的初始Y位置,你的视图控制器的视图大小可能不再改变,底部边距将是不同的。

而是试试这个(从底部算起)

_blockerView = [[UIView alloc] initWithFrame:self.view.bounds];
[_blockerView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[self.view addSubview:_blockerView];

_activityIndicator = [[UIActivityIndicatorView alloc] init];

CGRect activityIndictatorFrame = CGRectZero;
activityIndictatorFrame.size = [_activityIndicator sizeThatFits:CGSizeZero];
activityIndictatorFrame.origin.x = floorf((_blockerView.frame.size.width - activityIndictatorFrame.size.width) / 2.0);  //  X: centered
activityIndictatorFrame.origin.y = _blockerView.frame.size.height - activityIndictatorFrame.size.height - 116;  //  Y: fixed from bottom

[_activityIndicator setFrame:activityIndictatorFrame];
[_activityIndicator setAutoresizingMask:(UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin)];
[_blockerView addSubview:_activityIndicator];

[_activityIndicator startAnimating];

答案 1 :(得分:0)

我还没有足够的观点评论SomeGuy的答案,所以我会提出答案。

计算activityIndi​​cator框架相对于屏幕底部的Y位置无关紧要,因为计算在分配给CGRectMake之前进行评估。因此,如果它是固定数字或任何声明,则没有区别。

假设'self'是一个UIViewController实例,使用self.view.window.bounds会遇到麻烦:

  1. 当您调用self.view.window时,窗口可能甚至不存在(例如,在viewDidLoad中)
  2. 您的视图控制器的边界并不总是等于应用程序窗口边界。应根据ViewController的视图调整视图的子视图的大小和位置。
  3. 在第一种情况下,您将得到一个无效的rect,因此无效的自动调整遮罩。

    试试这个: _blockerView = [[UIView alloc] initWithFrame:self.view.bounds];