UINavigationItem внешний вид несоответствие - PullRequest
0 голосов
/ 11 октября 2018

По умолчанию в нашем приложении мы имеем следующий вид для 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

Есть предложения?

...