Почему [[UINavigationBar появление] setTranslucent: NO] разбивает мое приложение?

Тот же вопрос, что и

Ответ 1

Кажется, что свойство translucent просто невозможно установить с помощью UIAppearance. Я точно не знаю, почему, но я думаю, что некоторые свойства просто не поддерживаются. Однако я решил это, создав пользовательский UIViewController и сделав все остальные viewControllers в моем приложении подклассом этого пользовательского viewController. Таким образом, я могу установить глобальные свойства (например, translucent в вашем случае), которые будут унаследованы всеми другими viewControllers в моем приложении. Я знаю, что такое большое изменение, но я надеюсь, что это поможет.

**** РЕДАКТИРОВАТЬ ****

Как и в iOS 8, прозрачность может быть задана с помощью UIAppearance:

Цель C

if([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {

    [[UINavigationBar appearance] setTranslucent:YES];
}

Свифта

if (UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0 {

    UINavigationBar.appearance().translucent = true
}

Ответ 2

Вы можете обмануть его, указав не существующее изображение, которое будет накладывать на панель инструментов непрозрачную

[[UIToolbar appearance] setBackgroundColor:[UIColor colorWithRed:219.0/255.0 green:67.0/255.0 blue:67.0/255.0 alpha:1.0]];

[[UIToolbar appearance] setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

Ответ 3

Я не знаю ответа на ваш вопрос, и я попал сюда из Google, но если вы используете навигационные контроллеры, я могу изменить всю прозрачность с помощью этой строки:

[self.navController.navigationBar setTranslucent:NO];

Ответ 4

вы терпите крах, потому что используете незаконный метод. в UIAppearance, говорится:

To participate in the appearance proxy API, tag your appearance property selectors in your header with UI_APPEARANCE_SELECTOR.

это означает, что когда вы используете [[XXX appearance] method], метод метода должен иметь атрибут UI_APPEARANCE_SELECTOR или может вызывать исключение, а translucent не имеет его.

но то, что меня озадачивает, - это то, что [[XXX appearance] method] в iOS8 это нормально, но сбой в iOS7, а документ Apple не говорит об этом.

Ответ 5

Вы не можете изменить полупрозрачное свойство после инициализации класса.

[newsViewNavigationController.navigationBar setTranslucent:NO];

Я сделал что-то вроде этого, и это сработало!