Ios 将显示从视图中推送viewController
我正在尝试从Ios 将显示从视图中推送viewController,ios,objective-c,uinavigationcontroller,autolayout,Ios,Objective C,Uinavigationcontroller,Autolayout,我正在尝试从ViewController(称为B)的viewwillbeen或viewdidabeen推送UIViewController(称为a)。这很好用 但是当我突然出现一个。。。B不再推它(A)(或者我可以说它没有显示它的视图)。。。但当我在为我的情节提要禁用自动布局后尝试相同操作时,它会在弹出后再次推送A 我有3个解决方案来解决这个问题。。。但我不知道为什么会这样。任何人请告诉我这个问题的最新情况。提前谢谢 启用自动布局时: (ViewDid
ViewController
(称为B)的viewwillbeen
或viewdidabeen
推送UIViewController
(称为a)。这很好用
但是当我突然出现一个。。。B不再推它(A)(或者我可以说它没有显示它的视图)。。。但当我在为我的<代码>情节提要禁用自动布局后尝试相同操作时,它会在弹出后再次推送A
我有3个解决方案来解决这个问题。。。但我不知道为什么会这样。任何人请告诉我这个问题的最新情况。提前谢谢
启用自动布局时:
(ViewDidAppear)
rootViewController —————————————————————> demoViewController
(Push: animation:NO)
(Button Press)
demoViewController —————————————————————> rootViewController
(Pop: animation:NO)
根据代码,rootViewController将再次推送demoViewController,但它不显示demoViewController,而navigationController的堆栈中有demoViewController
禁用自动布局时:
(ViewDidAppear)
rootViewController —————————————————————> demoViewController
(Push: animation:NO)
(Button Press)
demoViewController —————————————————————> rootViewController
(Pop: animation:NO)
一切都在按照我们的设想进行 我不知道您在IB或代码中定义了什么视图(以及大小)。开发人员必须全面了解如何在IB中使用AutoLayout功能,否则会导致代码中出现非常严重(意外)的错误
因此,我强烈建议您阅读本《自动布局指南》:我猜viewcontroller A视图中的约束导致了错误
更准确地说,请转到本页:
因此,如果不尝试,可以或应该从该链接中清除。您不能在
视图中将视图控制器推入另一个视图中。因为当你想回来的时候,你必须设置变量
您是否在情节提要中设置了约束?因为它可以从中变成。请参阅此问题中给出的答案:
在我的情况下,您所描述的是在禁用自动布局的情况下发生的。这有帮助
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 250 * USEC_PER_SEC), dispatch_get_main_queue(), ^{
[self.navigationController pushViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"myScreen"] animated:YES];
});
好的,您可能永远不应该使用ViewWillDisplay或ViewDidDisplay来推送viewController。因为在您按下“后退”按钮后,它会弹出(在ViewDidDisplay的情况下),并立即再次按下同一个viewController(或者在ViewWillDisplay的情况下-它可能损坏navigationController viewController堆栈,因为它会在尝试弹出viewController时按下viewController)事实上,我已经在那里设置了一些条件。。。但我也有解决办法。。。但我需要理由。。因为它在禁用自动布局时工作,可能会出现一些动画冲突。您可以同时关闭和按下,这可能会导致动画崩溃。在按下之前,尝试在视图中添加一个小延迟(如0.1秒)。如果它有效,那么我是对的。我没有在故事板中添加任何约束。。。默认为空。