UINavigationBar setBackgroundImage:forBarMetrics:portrait / landscape weirdness

时间:2012-06-19 17:11:39

标签: objective-c ios ios5 uinavigationbar landscape-portrait

切换到iOS5,我想使用以下代码段来使用自定义样式UINavigationBar

if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:
                                                                         forBarMetrics:)]) {
        [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBar.png"] 
                                           forBarMetrics:UIBarMetricsDefault];
        [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBarLandscape.png"] 
                                           forBarMetrics:UIBarMetricsLandscapePhone];
    }

这很有效,但是:我的自定义图像有圆角(例如附加的图像),导致以下情况:

从纵向模式开始,看起来很好。

Portrait (normal)

更改为横向模式也看起来不错。

Landscape (normal)

然后改回画像模式似乎不会将图像更改为 NavigationBar.png ,因此右上角没有圆角。

Portrait (without rounded corner on the top right)

对于如何解决这个问题的任何建议表示赞赏。

//编辑

将以下代码添加到我的viewController中会删除此“错误”,但这不是正确的解决方案!?!

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation 
                                            duration:duration];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavigationBar.png"] 
                                                  forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarLandscape.png"] 
                                                  forBarMetrics:UIBarMetricsLandscapePhone];
}

1 个答案:

答案 0 :(得分:0)

由于iOS6默认会引入圆角,这个问题很快就会消失。