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

时间:2014-09-06 14:49:42

标签: ios objective-c iphone xcode uinavigationcontroller

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

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

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

我得到的故障如果我回到上一个屏幕,那个视图的条形图项与前一个视图中的条形图项重叠。

截图: 起点:enter image description here

向后滑动手势并完成手势,转到上一个视图,正常工作:enter image description here

向后滑动手势并取消手势,从而保持当前屏幕,然后返回上一屏幕,文本按钮重叠:enter image description here

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

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

编辑,问题原因如下:

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

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

2 个答案:

答案 0 :(得分:1)

根据Vikram的回复和StackOverflow的另一个问题进行管理。

所以问题是在[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

答案 1 :(得分:0)

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