0

をタップで動作しますiOS 10.3までうまく動作します。ImagePickerControllerはrightBarButtonを示していない。しかし、それは親controller.Itに戻った移動するには、ナビゲーションバーの右にあるボタンをキャンセル示すために、iOSの11.I've上のXcode 9を使用してアプリケーションを実行している間、私は奇妙な問題に直面しています

私は、ナビゲーションバー& .topItem.rightBarButtonItemの色合い色を設定して試してみました。ナビゲーションの代行メソッドを操作すると、アルバムを選択するとキャンセルボタンが表示されます&はアルバムリストビューに戻ります。ここ

はコードで、私はUIImagePickerController拡張子

@implementation UIImagePickerController (FFGNavbar) 

    -(void)viewWillLayoutSubviews 
    { 
     [super viewWillLayoutSubviews]; 
     [self.navigationBar setTintColor:[UIColor cf_themeColor]]; 
     self.navigationBar.topItem.rightBarButtonItem.tintColor = [UIColor cf_themeColor]; 
     [self.navigationBar.topItem.rightBarButtonItem setEnabled:true]; 

    } 

でviewWillLayoutSubviewsをオーバーライドして試してみたボタン

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 

    //Add cancel button since it was not visible even applying tint color to imagepickerviewcontroller 
    UIButton* customButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [customButton setFrame:CGRectMake(0, 0, 80, 44)]; 
    [customButton setTitleColor:self.tintColor forState:UIControlStateNormal]; 
    [customButton.titleLabel setTextAlignment:NSTextAlignmentRight]; 
    [customButton setTitle:NSLocalizedString(@"CF_CANCEL", @"Cancel") forState:UIControlStateNormal]; 
    [customButton addTarget:self action:@selector(cancelButtonAction) forControlEvents:UIControlEventTouchUpInside]; 

    UINavigationBar *navigationBar = navigationController.navigationBar; 
    navigationBar.barStyle = UIBarStyleDefault; 
    navigationBar.tintColor = [UIColor redColor]; 
    UINavigationItem *pickerNavBarTopItem = navigationBar.topItem; 

    UIBarButtonItem *cancelBarItem = [[UIBarButtonItem alloc]initWithCustomView:customButton]; 
    pickerNavBarTopItem.rightBarButtonItem = cancelBarItem; 

} 
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(nonnull UIViewController *)viewController animated:(BOOL)animated { 

    //Add cancel button since it was not visible even applying tint color to imagepickerviewcontroller 
    UIButton* customButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [customButton setFrame:CGRectMake(0, 0, 80, 44)]; 
    [customButton setTitleColor:self.tintColor forState:UIControlStateNormal]; 
    [customButton.titleLabel setTextAlignment:NSTextAlignmentRight]; 
    [customButton setTitle:NSLocalizedString(@"CF_CANCEL", @"Cancel") forState:UIControlStateNormal]; 
    [customButton addTarget:self action:@selector(cancelButtonAction) forControlEvents:UIControlEventTouchUpInside]; 

    UINavigationBar *navigationBar = navigationController.navigationBar; 
    navigationBar.barStyle = UIBarStyleDefault; 
    navigationBar.tintColor = [UIColor redColor]; 
    UINavigationItem *pickerNavBarTopItem = navigationBar.topItem; 

    UIBarButtonItem *cancelBarItem = [[UIBarButtonItem alloc]initWithCustomView:customButton]; 
    pickerNavBarTopItem.rightBarButtonItem = cancelBarItem; 
} 

- (void)cancelButtonAction{ 

    if (self.imageCompletionBlock != nil) { 
     self.imageCompletionBlock(nil, self.takePhotoOption); 

    } 
    [self.imagePickerController dismissViewControllerAnimated:YES completion:nil]; 
} 

をキャンセル示すために使ってきた私は、私は他に何を行うことができます助けてください以前と同じように動作させる。

私が上にタップしたとき、私はボタンが見えるようになり、これはキャンセル右クリックのスクリーンショットを撮影しました。貴重な答えを enter image description here

+0

'UIImagePickerController'がボタンをキャンセルしている、なぜあなたはそれをオーバーライドする必要がありますか? – Bannings

+0

今は表示されません。だから、少なくとも私はそれが前進しながら/戻ってくるのを見ることができますオーバーライドした後。 – Ellen

+1

アプリケーションのどこかでUIAppereanceを使用している可能性があります。 –

答えて

0

感謝。 UINavigationControllerサブクラスUYBarButtonItemの外観コードをカスタムボタンの設定に使用されている&から削除することで問題を解決できました。

関連する問題