5

iOS 6 では、次のコードを使用して、UIImagePickerControllerソース タイプのをプッシュし、UIImagePickerControllerSourceTypeCameraそのナビゲーション バーを表示していました。画像を撮った後、ユーザーがデータベースにいくつかの属性を設定できるようにする別のVCをプッシュしているため、ナビゲーションバーを表示したかったのです。

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
    cameraController = [[UIImagePickerController alloc] init];

    cameraController.delegate = self;
    cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:cameraController animated:YES completion:NULL];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
    cameraController.topViewController.title = @"Add";
    cameraController.navigationBar.translucent = NO;
    cameraController.navigationBar.barStyle = UIBarStyleDefault;

    [cameraController setNavigationBarHidden:NO animated:NO];
}

iOS 7 では、このコードはナビゲーション バーを表示しなくなりました。UIImagePickerControllerソースタイプの のナビゲーションバーを元に戻す方法があるかどうかは誰にもわかりUIImagePickerControllerSourceTypeCameraませんか?

4

2 に答える 2

5

何だと思う?imagePicker が表示されると、自動的に非表示に設定されます....
次の実行ループで setHidden:NO を実行するだけです。お気に入り:

[self presentModalViewController:imagePicker animated:YES];
[self performSelector:@selector(showNavigationBar:) withObject:imagePicker afterDelay:0];

- (void)showNavigationBar:(UIImagePickerController*)imagePicker {
    [imagePicker setNavigationBarHidden:NO];
}
于 2013-11-28T11:18:07.907 に答える
3

@LeverkusenFanのソリューションはうまく機能します。ただし、実行ループなどのハックを使用する代わりに、presentViewController の完了ハンドラーを使用してその効果を実現します。

[self presentViewController:cameraController animated:YES completion:^{
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
    cameraController.topViewController.title = @"Add";
    cameraController.navigationBar.translucent = NO;
    cameraController.navigationBar.barStyle = UIBarStyleDefault;

    [cameraController setNavigationBarHidden:NO animated:NO];
}];

実際、ナビゲーション バーが表示されたときの奇妙なアニメーションを回避し、ナビゲーション バーの [戻る] ボタンを押したときにうまく機能するより良い解決策は次のとおりです。

UIImagePickerController のデリゲートで、次の関数を実装します。

- (void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (navigationController == self.cameraController && navigationController.viewControllers.count == 1) {
        // When showing the ImagePicker update the status bar and nav bar properties.
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

        navigationController.topViewController.title = self.cameraTitle;
        navigationController.navigationBar.translucent = NO;
        navigationController.navigationBar.barStyle = UIBarStyleDefault;
        [navigationController setNavigationBarHidden:NO animated:animated];
    }
}

この関数は、ImagePicker が表示されたときに呼び出され、ImagePicker の rootViewController (つまりカメラ画面) のみを変更します。

于 2015-06-27T01:56:04.083 に答える