iOS 7的UITableView didSelectRowAtIndexPath pushViewController以编程方式,animation问题

编辑:我已经find了我自己的问题的答案。 请看我的post的底部。

我有一个animation的问题试图推动一个UITableView编程的didSelectRowAtIndexPathUIViewController 。 当我在iOS 6中运行此代码时,它工作正常。 在iOS 7中,animation混乱了(它向左移动约20%的屏幕然后消失)。 如果我在故事板上做这个animation是好的。 我是否错过了一些东西或者有没有使用故事板的方法?

 // This is a cut down example. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController *viewController = [[UIViewController alloc] init]; [self.navigationController pushViewController:viewController animated:YES]; } 

这就是在tableView消失之前的样子。 我明白为什么这样做。 这是因为推动新视图应该像使用情节提要一样滑动。 出于某种原因,它不能以编程方式工作。

在这里输入图像说明

编辑:这是我所有错过了由于某种原因,你必须设置一个backgroundColor。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController *viewController = [[UIViewController alloc] init]; [viewController.view setBackgroundColor:[UIColor orangeColor]]; [self.navigationController pushViewController:viewController animated:YES]; } 

这是由iOS7中的pushViewController:animated:方法触发的默认“视差”行为。

storyboards有一点经验,我怀疑他们的segueUINavigationController push / popanimation不同。

您可以通过构build自定义animation或自定义交互式转场来覆盖默认的推送/popup。

或者你可以使用UIViewController 方法 :

 transitionFromViewController:toViewController:duration:options:animations:completion: 

自定义此行为。 希望这有助于,并希望我已经理解你的问题…

我一直有类似的问题,我通过推迟电话来解决

 [self performSelector:@selector(displayMyViewController) withObject:nil afterDelay:0.2f]; 

我也遇到过这个问题。 另一个原因是修改目标视图的alpha。 至less这就是我所做的。

如果要在显示加载HUD或某物时更改视图的不透明度,请不要修改视图的Alpha。 相反,请调整表视图或集合视图的Alpha,或者您在该视图中的任何内容。 如果你有几个元素,把它们放在一个视图中,改变视图的alpha值。

如上所述,另一个原因也是背景颜色。 您需要设置目标视图的背景颜色。 我也碰到过好几次了。