11

編集:私は自分の質問に対する答えを見つけました。私の投稿の一番下を見てください。

UIViewControllerプログラムでをプッシュしようとすると、アニメーションの問題が発生didSelectRowAtIndexPathUITableViewます。このコードを 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 が消える直前の様子です。なぜこれを行うのか理解しています。これは、ストーリーボードを使用する場合と同様に、プッシュされる新しいビューがその上をスライドしてアニメーション化する必要があるためです。何らかの理由で、プログラム的には機能しません。

ここに画像の説明を入力

編集:これは私が見逃したすべてです 何らかの理由で backgroundColor を設定する必要があります。

- (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思います。segueUINavigationController

カスタムのアニメーション化またはカスタムのインタラクティブなトランジションを構築することで、デフォルトのプッシュ/ポップをオーバーライドできます。

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 に答える