由于 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 中出现问题

uiprogressview 没有出现在 iOS 7 中的 uitableview 下面

在视图中锁定纵向? IOS 7

iOS 7:出现模态视图控制器时限制设备当前方向

在 iOS 7 中,状态栏出现在我的视图边界上 [重复]

在 iOS 7 中,状态栏和导航栏出现在我的视图边界上