我正在尝试在屏幕上设置一个UIActivityIndicator
,它必须与屏幕底部保持相同的距离(适用于3.5和4英寸的iPhone)。 UIActivityIndicator
将作为subView
的{{1}}放置,其目的是阻止用户互动。
这是我的代码,但它不起作用:
blockerView
答案 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的答案,所以我会提出答案。
计算activityIndicator框架相对于屏幕底部的Y位置无关紧要,因为计算在分配给CGRectMake之前进行评估。因此,如果它是固定数字或任何声明,则没有区别。
假设'self'是一个UIViewController实例,使用self.view.window.bounds会遇到麻烦:
在第一种情况下,您将得到一个无效的rect,因此无效的自动调整遮罩。
试试这个: _blockerView = [[UIView alloc] initWithFrame:self.view.bounds];