由于 iOS 7,视图没有出现
Posted
技术标签:
【中文标题】由于 iOS 7,视图没有出现【英文标题】:View does not appear because of iOS 7 【发布时间】:2013-09-18 12:10:11 【问题描述】:我在装有 ios 7 的 iPhone 上试用了我的应用程序,除了一件事外,一切都运行良好。在 iOS 6 版本上,当我执行以下代码时,加载视图(带有活动指示器)在加载结束时出现并消失。在 iOS 7 上,视图在加载过程中根本不会出现。
self.loadingView.alpha = 1.0;
[self performSelector:@selector(accessServices) withObject:nil afterDelay:0.0f];
AccessServices 方法:
- (void)accessServices
// Getting JSON stuff
// The code is OK, I just don't copy/paste it here
self.loadingView.alpha = 0.0;
会发生什么?这是 iOS 7 的错误吗?
【问题讨论】:
可能是线程问题,你试过performSelectorOnMainThread:
吗?
你能检查一下 iOS 7 中视图的框架吗,因为当我在 iOS 7 中部署项目时,xib 中的框架已更改。然后我更改了 xib 中的框架并成功实现了我的逻辑。
视图不会出现,因为您调用 accessServices 时延迟为 0.0f,这会导致活动指示器消失。您应该在 JSON 回调处理程序中将 alpha 设置为 0
【参考方案1】:
我没想到上面代码的行为会发生变化,尽管它可能无法按您期望的方式工作我并不感到惊讶。如果您在主队列上执行 JSON 操作,您的代码将依赖于 UI 更新何时发生的特性,而不是使其明确。
您可能希望将 JSON 代码显式分派到后台队列,然后将最终的 UI 更新分派回主队列。这样的标准模式是:
self.loadingView.alpha = 1.0;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
// Getting JSON stuff
// The code is OK, I just don't copy/paste it here
dispatch_async(dispatch_get_main_queue(), ^
self.loadingView.alpha = 0.0;
);
);
您可以使用 GCD(如上)或操作队列,或其他任何东西。但想法是一样的,UI 更新应该发生在主队列上,而任何远程计算昂贵或缓慢的事情都应该发生在后台队列上。
无论 iOS 版本如何,此模式都应该有效。
【讨论】:
非常感谢,我现在比以前更强壮了。以上是关于由于 iOS 7,视图没有出现的主要内容,如果未能解决你的问题,请参考以下文章
滚动视图在 iOS 7 中运行良好,但在 iOS6 中出现问题