我发现一个看起来像iOS7错误,而在UINavigationController中弹出视图控制器(VC)与边缘滑动。
我建立了以下VC层次结构:
UINagivationController
|
--- UIVewControllerR (root)
|
--- UIViewControllerA
|
--- UIViewControllerB
我试图通过边缘滑动弹出UIViewControllerB,并不断地弹出UIViewControllerA。效果很好。但是,如果第一次滑动操作被取消,然后重新尝试弹出它,我发现一个bug出现了。弹出UIViewControllerA之后,我发现尽管弹出了UIViewControllerA,UIViewControllerA的导航栏项目仍然显示。
简而言之,UIViewControllerR是用UIViewControllerA的导航栏项显示的。
没有可能影响UINavigationController转换的代码。
它是iOS7上的一个bug吗?
发布于 2014-01-22 23:18:02
我找到了解决这个问题的办法。
我所做的是在我的UINagivationController类中设置一个名为BOOL的属性
@property (nonatomic, assign) BOOL interactivePopGestureComplete;
然后在那个UINagivationController的开头
self.interactivePopGestureComplete = YES;
if([self respondsToSelector:@selector(interactivePopGestureRecognizer)])
[self.interactivePopGestureRecognizer addTarget:self action:@selector(defaultGestureAction:)];
行动方法是这样的:
- (void)defaultGestureAction:(UIGestureRecognizer *)sender
{
if(sender.state == UIGestureRecognizerStateBegan || sender.state == UIGestureRecognizerStateChanged)
self.interactivePopGestureComplete = NO;
else
self.interactivePopGestureComplete = YES;
}
在viewWillAppear:或viewWillLayoutSubviews:(在存在此问题的viewControllers中),在这两种方法中您要更新navigationBarButtons和navigationBar的地方,只需检查
// Lets say our UINagivationController class name is NavigationCon
NavigationCon *navCon = (NavigationCon *)self.navigationController;
if(navCon.interactivePopGestureComplete)
{
// only then update navigationBar
}
发布于 2014-01-22 22:09:26
我能理解你面临的问题
有两种情况可能发生。
1.您在哪里完成了导航栏文本的更改,您在viewWillAppear或viewDidAppear中完成了所有的导航栏文本更改,那么happen..You可能必须在viewDidLoad中完成它
2.在转换更改结束之前对导航条进行更改。
告诉我它是否对你有帮助。
https://stackoverflow.com/questions/21298051
复制相似问题