Внешний вид панели навигации не меняется после первой настройки

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

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-3.0f forBarMetrics:UIBarMetricsDefault];

Затем, позже в иерархии навигации, мне нужно установить другое вертикальное смещение, поэтому я вызываю:

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-0.5f forBarMetrics:UIBarMetricsDefault];

Но я обнаружил, что новое вертикальное смещение не применяется, когда я работаю в активном приложении. Однако, если приложение становится неактивным, а затем снова активным, оно применяется. Как я могу изменить это смещение, пока приложение находится на переднем плане?

Спасибо!

2 ответа

Из https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html

iOS применяет изменения внешнего вида, когда вид входит в окно, он не меняет внешний вид представления, которое уже находится в окне. Чтобы изменить внешний вид представления, находящегося в данный момент в окне, удалите представление из иерархии представлений и затем верните его обратно.

В общем, вам нужно сделать HACK, чтобы удалить вид, а затем сразу же добавить его обратно, что-то вроде этого...

UIView *currentview = ((AppDelegate*)[UIApplication sharedApplication].delegate).window.rootViewController.view;
UIView *superview = currentview.superview;
[currentview removeFromSuperview];
[superview addSubview:currentview];

И для Свифта...

if let currentview = (UIApplication.sharedApplication().delegate as? AppDelegate)?.window?.rootViewController?.view {
    if let superview = currentview.superview {
        currentview.removeFromSuperview()
        superview.addSubview(currentview)
    }
}

Вы пытались сделать это с блоком анимации?

 [UIView animateWithDuration:3
             animations:^{
                          [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-3.0f forBarMetrics:UIBarMetricsDefault];
                          [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-0.5f forBarMetrics:UIBarMetricsDefault];
                     }];
Другие вопросы по тегам