4

当应用程序处于活动状态时,我为导航栏的标题设置了一定的垂直偏移量:

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

然后,稍后在导航层次结构中,我需要设置不同的垂直偏移量,因此我调用:

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

但是我发现当我在应用程序处于活动状态时导航时不会应用新的垂直偏移量。但是,如果应用程序变为非活动状态然后再次活动,则会应用它。当应用程序保持在前台时,如何更改此偏移量?

谢谢!

4

2 回答 2

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)
    }
}
于 2015-11-11T16:41:54.967 回答
0

你试过用动画块做这个吗?

 [UIView animateWithDuration:3
             animations:^{
                          [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-3.0f forBarMetrics:UIBarMetricsDefault];
                          [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-0.5f forBarMetrics:UIBarMetricsDefault];
                     }];
于 2013-11-04T09:53:11.913 回答