所以我有一个屏幕可以检查某些属性,并且在定义的情况下会立即在viewDidLoad
中以模态方式加载另一个视图,而无需动画,在当前加载的视图上(以便不显示查看下面)。在iOS 8之前,完成此操作后,原始视图将暂停其加载(不会继续viewWillAppear
,viewDidLayoutSubviews
等),直到重叠控制器被解除。我发现这种行为适合我的需要,因为原始视图中的元素上的任何动画都可以完成。但是,在iOS 8中,我得到了一个完全不同的事件链。首先,出于某种原因viewDidLayoutSubviews
被调用了两次(那是什么?)但更重要的是视图不喜欢在viewDidAppear
之前随时弹出另一个控制器,抱怨{{1} }}。不仅如此,但基础unbalanced calls to begin/end appearance transitions
继续加载(viewController
,viewWillAppear
等),即使它没有被显示导致这些事件中的所有方法都被触发。我很感激Apple是否已经更新了这样的方式,所以如果新的meta是一个我愿意采用的完全不同的过程,因为我无法让它正常工作。< / p>
我很感激如何让这个模态视图插入而不会导致底层视图继续加载。
谢谢,
麦克
更新:要提供一些代码。以下是主viewDidLayoutSubviews
的{{1}},如果需要,它会显示模态VC。
viewDidLoad
这就是问题所在。在viewController
中调用演示文稿会导致呈现VC的呈现继续。在iOS 8之前,呈现VC(如果尚未呈现)会暂停,直到模态VC被解除,它将照常完成。根据我的原始帖子,iOS 8中的情况并非如此。
答案 0 :(得分:1)
Apple已经对ios 8制定了更为严格的规则。为了给你一个例子,我将通过以下方式推动我的观点: - 在我的应用程序中,我曾经在导航堆栈中弹出一些视图控制器,然后推出一个新的,但是在ios7中从未见过那种流行音乐,只有推动过渡似乎发生了(当逻辑上,应该看到pop然后推动)。在ios 8中,这件事发生了变化。现在只有在观看和注意到流行音乐后才能看到推动。这打破了用户体验非常糟糕。
我在其他方面也注意到了这种严格性,但那些与UI / UX无关,所以我现在不会详细介绍它。
就你的情况而言,根据我的经验,我可以告诉你,你一直在以错误的方式做事。随着苹果的严格执行,您的实施似乎已经破裂。 我认为唯一的解决方案是在viewdidAppear中转移每一张支票。
如果您希望继续您之前为ios7所做的工作,可以使用此检查:
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
// Code for ios 8 implementation
}
else
{
// Code for ios 7 implementation
}
虽然我会建议你避免因为你瞄准是完全可以实现的。 此外,您正在做的事情很容易导致导航堆栈中的不一致,这可能导致应用程序崩溃。