ImagePickerController на iOS 11 не показывает rightBarButton, но работает при нажатии

Я столкнулся со странной проблемой при запуске приложения с использованием Xcode 9 на iOS 11. Я должен показать кнопку отмены на панели навигации вправо, чтобы вернуться на родительский контроллер. До iOS 10.3 он работал нормально.

Я пробовал с настройкой оттенка цвета панели навигации & .topItem.rightBarButtonItem . При обработке методов делегирования навигации кнопка отмены становится видимой, когда мы выбираем любой альбом и возвращаемся к просмотру списка альбомов.

вот код, который я использовал для отображения кнопки отмены

    - (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];
}

Я пытался с переопределением viewWillLayoutSubviews в расширении 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];

    }

Пожалуйста, помогите мне, что еще я могу сделать, чтобы это работало как раньше.

Я сделал снимок экрана, когда нажал на верхний правый угол, после чего эта кнопка отмены стала видимой.

1 ответ

Решение

Спасибо за ценные ответы. Мне удалось решить проблему, удалив код внешнего вида UIBarButtonItem из подкласса UINavigationController и использовав его с настройкой пользовательской кнопки.

Другие вопросы по тегам