UINavigationBar自定义背景图片

时间:2011-06-14 09:20:51

标签: ios custom-controls ios5

我使用这些suggested solutions为我的UINavigationBar提供了一个自定义图像。 (为了使它更明确:我在AppDelegate.m文件中向UINavigationBar添加了一个类别)。 到目前为止这个工作正常,我没有任何问题。然而,现在我在最近的iOS5测试版上运行我的应用程序。 UINavigationBar现在再次为空白。

由于我安装的所有其他应用程序(使用自定义图像)仍然表现相同,我的代码中必定存在“错误”,iOS5现在不再支持了。

所有人都知道我采用上述解决方案会出现什么问题?

我发现使其工作的唯一方法是创建UINavigationBar的真实子类,然后在所有视图中告诉IB使用该自定义类。虽然不那么优雅......

4 个答案:

答案 0 :(得分:4)

要支持这两个版本,您需要询问是否存在setBackgroundImage:forBarMetrics:method。

看看我关于它的博文: http://www.mladjanantic.com/setting-custom-background-for-uinavigationbar-what-will-work-on-ios5-and-ios4-too/

答案 1 :(得分:1)

另一个可能的“hacky”解决方案是创建一个自定义视图并将其作为子视图插入UINavigationBar - 可能它仍然可以工作:

UIView *backgroundView = ...
[navigationBar insertSubview:backgroundView atIndex:0];

或者检查iOS5文档中更新的UINavigationBar类引用,以获取设置自定义背景的内置方法

答案 2 :(得分:1)

使用此代码

        UIImage *backgroundImage = [UIImage imageNamed:@"strip.png"];
        [upnavbar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];

这将有效。

答案 3 :(得分:0)

这对我的工具栏起了作用

//toolBar background image set based on iOS version
    [[UIDevice currentDevice] systemVersion];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {

        //iOS 5
        UIImage *toolBarIMG = [UIImage imageNamed: @"toolBar_brown.png"];  

        if ([toolBar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) { 
            [toolBar setBackgroundImage:toolBarIMG forToolbarPosition:0 barMetrics:0]; 
        }

    } else {

        //iOS 4
        [toolBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolBar_brown.png"]] autorelease] atIndex:0]; 

    }