Внешний вид панели навигации не меняется после первой настройки
Я устанавливаю определенное вертикальное смещение для заголовка панели навигации, когда приложение становится активным:
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-3.0f forBarMetrics:UIBarMetricsDefault];
Затем, позже в иерархии навигации, мне нужно установить другое вертикальное смещение, поэтому я вызываю:
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-0.5f forBarMetrics:UIBarMetricsDefault];
Но я обнаружил, что новое вертикальное смещение не применяется, когда я работаю в активном приложении. Однако, если приложение становится неактивным, а затем снова активным, оно применяется. Как я могу изменить это смещение, пока приложение находится на переднем плане?
Спасибо!
2 ответа
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];
}];