11

编辑:我找到了我自己问题的答案。请看我帖子的底部。

我在尝试以编程方式插入时遇到UIViewController动画didSelectRowAtIndexPath问题UITableView。当我在 iOS 6 中运行此代码时,它运行良好。在 iOS 7 中,动画被弄乱了(它向左移动了大约 20% 的屏幕然后消失了)。如果我在情节提要中执行此操作,则动画很好。我是否遗漏了某些东西,或者是否有办法在不使用情节提要的情况下解决这个问题?

// 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 消失之前的样子。我明白它为什么这样做。这是因为被推送的新视图应该像使用情节提要一样动画滑入它。由于某种原因,它不能以编程方式工作。

在此处输入图像描述

编辑:这就是我错过的一切 出于某种原因,您必须设置背景颜色。

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

3 回答 3

2

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

几乎没有经验,storyboards我怀疑他们segue的 s 与UINavigationController推送/弹出动画不同。

您可以通过构建自定义动画或自定义交互式过渡来覆盖默认推送/弹出。

或者您可以使用以下UIViewController 方法

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

自定义此行为。希望这会有所帮助,并希望我已经理解你的问题......

于 2013-10-08T19:41:25.473 回答
0

我一直有类似的问题,我设法通过延迟通话来解决

[self performSelector:@selector(displayMyViewController) withObject:nil afterDelay:0.2f];
于 2013-10-09T02:33:29.223 回答
0

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

如果您想在显示加载 HUD 或其他内容时更改视图的不透明度,请不要修改视图的 alpha。相反,请调整 Table View 或 Collection 视图的 alpha,或者您在该视图中拥有的任何内容。如果您有多个元素,请将它们全部放在一个视图中并更改该视图的 alpha。

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

于 2014-03-28T10:54:01.577 回答