使用 iOS 7 滑动导航时导航栏出现故障

Posted

技术标签:

【中文标题】使用 iOS 7 滑动导航时导航栏出现故障【英文标题】:Navigation bar glitch when using iOS 7 swipe navigation 【发布时间】:2014-09-06 14:49:42 【问题描述】:

当我使用滑动返回上一个视图时,我的应用出现了奇怪的图形故障。

当我正常滑动并完成滑动手势时,一切正常。

当我取消滑动手势时,即:开始手势但然后向相反方向移动手指以停止手势并停留在当前视图。

我遇到的问题如果我然后返回上一个屏幕,该视图的 barbutton 项目与前一个视图中的 barbutton 项目重叠。

截图: 起点:

向后滑动手势和完成手势,转到上一个视图,正常工作:

回扫手势和取消手势,停留在当前屏幕,然后返回上一屏幕,文本按钮重叠:

此图形故障仅在强制退出应用并重新启动时才会消失。当然,如果你再次引发故障,它会再次出现。

希望有一些开发人员遇到同样的问题。

编辑,问题原因如下代码:

- (void)resetCacheAndRefreshTableAnimated:(BOOL)animated 
    [NSFetchedResultsController deleteCacheWithName:kCDFollowedCacheName];
    [self setSortDescriptorsForFetchRequest:self.fetchedResultsController.fetchRequest];
    NSError *error = nil;
    [self.fetchedResultsController performFetch:&error];
    [self.tableView reloadData];

此方法在 ViewWillAppear 中调用。删除方法调用后,问题就消失了。有什么想法吗?

【问题讨论】:

请贴一些代码。我可以想象的是你可能没有清除移动的视图,所以即使你在移动中间取消了手势,已经移动的视图也不会重置。 【参考方案1】:

根据 Vikram 的回复和 *** 的另一个问题设法弄清楚。

所以问题是[self.tableView reloadData]ViewWillAppear 中被调用。 但是取消滑动时不应重新加载tableview。

此代码可防止在取消滑动时重新加载:

id <UIViewControllerTransitionCoordinator> tc = self.transitionCoordinator;
if (tc && [tc initiallyInteractive])

    [tc notifyWhenInteractionEndsUsingBlock:
     ^(id<UIViewControllerTransitionCoordinatorContext> context)
     
         if (![context isCancelled])
             // not cancelled, do it
             [self resetCacheAndRefreshTableAnimated:YES]; // this will clear the CoreData cache and forces a reload
     ];

else // not interactive, do it
    [self resetCacheAndRefreshTableAnimated:YES];       // this will clear the CoreData cache and forces a reload

【讨论】:

【参考方案2】:

您可能没有清除移动的视图,因此即使您在移动过程中取消手势,已移动的视图也不会重置。

【讨论】:

谢谢,我发现了类似的问题:***.com/questions/23261304/…。取消手势时如何识别? 发现问题的根源,在取消的视图控制器的 ViewWillAppear 中,这条线导致了问题:[self resetCacheAndRefreshTableAnimated:YES]; 删除它可以解决问题。

以上是关于使用 iOS 7 滑动导航时导航栏出现故障的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7:在底部导航栏的表格视图之间滑动

ios 7状态栏不继承导航栏颜色

iOS - 从导航栏向下滑动打开/显示视图

微信h5滑动隐藏底部导航栏

iOS 7 多任务切换器:导航栏出现黑色

ios 导航栏透明, 上下滑动 导航栏 颜色渐变