Почему [[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];
Я сделал что-то вроде этого, и это сработало!