По умолчанию в нашем приложении мы имеем следующий вид для UINavigationBarItems
NSDictionary *atts = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor clearColor], NSForegroundColorAttributeName, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateNormal];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateHighlighted];
В основном мы устанавливаем заголовок прозрачным.
Это влияет на потенциальную интеграцию с другими компонентами, напримерUIImagePicker, но в основном мы откатываем этот вид при отображении средства выбора изображений.
NSDictionary *atts = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor darkGrayColor], NSForegroundColorAttributeName, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateNormal];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateHighlighted];
Но если в UITextView у нас есть ссылка или электронное письмо, а при касании 3D система отображаетВ меню «Отправить сообщение» или «Добавить в контакты» приложение отображается с прозрачными кнопками, что ухудшает удобство использования.
Обходной путь 1
Мы обнаруживаем в окне viewWillDisappear, еслипредставление всплыло или просто скрыто, потому что другой компонент (средство выбора изображений, добавить контакт, смс ...)
- (void) viewWillDisappear:(BOOL)animated {
BOOL isBeingRemoved = [self isMovingFromParentViewController] || self.isBeingDismissed;
if (isBeingRemoved) {
// Hidding the UINavigationBarItem title
NSDictionary *atts = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor clearColor], NSForegroundColorAttributeName, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateNormal];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateHighlighted];
} else {
// Make visible the UINavigationBarItem title
NSDictionary *atts = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor darkGrayColor], NSForegroundColorAttributeName, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateNormal];
[[UIBarButtonItem appearance] setTitleTextAttributes:atts forState:UIControlStateHighlighted];
}
[super viewWillDisappear:animated];
}
Но при этом внешний вид приложения обновляется, и заголовок приложениябольше не прозрачный.
Обходной путь 2
Мы пытались применить прозрачность в viewWillAppear и к darkGray в viewWillDisappear и работает для средства выбора изображений, но не для остальных приложений.
Обходной путь 3
Мы также пытались установить darkGrayColor без использования внешнего вида в представлении исчезать, но не работали.
self.navigationcontroller.navigationbar.titletextattributes
Есть предложения?