Ошибка при переходе от вида с uinavitationbar к без

У меня есть приложение с двумя контроллерами просмотра, ViewController и NextViewController. ViewController не имеет панели навигации и имеет белую строку состояния. У NextViewController есть панель навигации и черная (по умолчанию) строка состояния. Я столкнулся с ошибкой при возврате к ViewController из NextViewController и отмене смахивания, когда панель навигации в NextViewController исчезла. Раскадровка просто имеет два представления с кнопкой и переходом к действию. Ошибка возникает не всегда, но достаточно часто, чтобы быть проблемой. Ошибка связана с методом - (UIStatusBarStyle) preferredStatusBarStyle, так как все работает нормально, когда я удаляю методы.

Могу ли я каким-то образом предотвратить появление этой ошибки, пока у меня все еще есть белая строка состояния на моем ViewController и включена прокрутка, или я вынужден удалить любую функцию?

ViewController

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

NextViewController

@implementation NextViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

-(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleDefault;
}

Другая, возможно, актуальная информация: возникла проблема на iPhone 5s с iOS 8, но она также возникает на симуляторе с iOS 9. Внешний вид строки состояния на основе контроллера View установлен по умолчанию, YES.


person Belle    schedule 24.09.2015    source источник


Ответы (1)


Стиль строки состояния зависит от - preferredStatusBarStyle контроллера представления, если панель навигации скрыта, в противном случае от контроллера навигации, поэтому - preferredStatusBarStyle в вашем NextViewController бесполезно.

Похоже, что ошибка связана со стилем строки состояния навигационного контроллера, вы можете подкласс UINavigationController переопределить метод childViewControllerForStatusBarStyle, чтобы избежать ошибки.

@implementation MyNavigationController

- (UIViewController *)childViewControllerForStatusBarStyle {
    return self.topViewController;
}

@end

Теперь стиль строки состояния будет зависеть от контроллера представления независимо от того, скрыта панель навигации или нет. И бага бы не было.

person WXYZ    schedule 09.10.2015