gpt4 book ai didi

iOS 8 viewDidLoad 模态呈现导致多次呈现

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:00 25 4
gpt4 key购买 nike

所以我有一个屏幕可以检查某些属性,并且在定义的情况下会立即在 viewDidLoad 中以模态方式加载另一个 View ,没有动画,覆盖当前正在加载的 View (以免以显示下面的 View )。在 iOS 8 之前,完成此操作后,原始 View 将暂停其加载(不会继续 viewWillAppearviewDidLayoutSubviews 等),直到覆盖 Controller 被关闭。我发现这种行为适合我的需要,因为原始 View 中元素的任何动画都可以完成。然而,在 iOS 8 中,我得到了一个完全不同的事件链。首先,出于某种原因 viewDidLayoutSubviews 被调用了两次(这是怎么回事?)但更重要的是, View 不喜欢在 viewDidAppear 之前的任何时候弹出另一个 Controller ,提示 开始/结束外观转换的调用不平衡。不仅如此,底层的 viewController 会继续加载(viewWillAppearviewDidLayoutSubviews 等),即使它没有显示,这会导致所有在这些事件中触发的方法。如果 Apple 更新了实现此类目标的方式,我将不胜感激,因此,如果新元是一个完全不同的过程,我愿意采用,但是,我无法让它正常工作。

对于如何让这个模态视图插入而不导致底层 View 继续加载的任何帮助,我将不胜感激。

谢谢,
迈克

更新: 将引入一些代码。下面是主要 viewControllerviewDidLoad,如果需要,它会呈现模态 VC。

-(void) viewDidLoad{

if(hasNotSeenTutorial){
TutVC* vc = [[TutVC alloc] initWithNibName:@"tutNib" bundle:nil]

vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.navigationController presentViewController:vc animated:NO completion:^{
NSLog(@"Has Completed Presentation");
}];
}
}

这就是问题所在。在 viewDidLoad 中调用此处的呈现,导致呈现 VC 的呈现继续。在 iOS 8 之前,呈现的 VC 如果还没有呈现,会暂停,直到模态 VC 被关闭,然后它会像往常一样完成。根据我的原始帖子,在 iOS 8 中情况并非如此。

最佳答案

Apple 在 ios 8 中制定了更严格的规则。举个例子,我将通过这个来阐明我的观点:- 在我的应用程序中,我曾经从导航堆栈中弹出一些 View Controller ,然后,将 a新的,但在 ios7 中从未见过该 pop,似乎只发生了推送转换(从逻辑上讲,应该先看到 pop 然后再推送)。而在 ios 8 中,这件事发生了变化。现在只有在看到并注意到 pop 之后才会看到 push。这严重破坏了用户体验。

我也注意到其他领域的这种严格性,但那些与 UI/UX 无关,所以我现在不会详细介绍。

就您的情况而言,根据我的经验,我可以告诉您,您一直在以错误的方式做事。由于苹果已经严格执行,您的实现似乎中断了。在我看来,唯一的解决方案是移动 viewdidAppear 中的每个检查。

如果您希望继续之前为 ios7 所做的方式,您可以使用此检查:

    if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
// Code for ios 8 implementation
}
else
{
// Code for ios 7 implementation
}

虽然我会建议您避免,因为您的目标是完全可以实现的。此外,您正在做的事情很容易导致导航堆栈不一致,从而导致应用程序崩溃。

关于iOS 8 viewDidLoad 模态呈现导致多次呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com