解决方案 »

  1.   

    你提供一张640*128(@2x)的图片试试。
    设置frame当然没用了,首先NavigationBar的frame是由NavigationController设置的,其次你使用的这个bar是一个样式代理协议,并不是运行时的实例,你至少也应该通过navigationController.navigatinoBar 来取得实例。
    setBackButtonBackgroundImage这个方法设置的是push到下一个页面后,左上角显示的后退按钮的样式。 现在流行扁平化,一般纯文字就行了,不用加背景(加的话可以用一个UIButton包装一下)。
    UIBarButtonItemStylePlain过时了,你可以点进去看注释:typedef NS_ENUM(NSInteger, UIBarButtonItemStyle) {
        UIBarButtonItemStylePlain,
        UIBarButtonItemStyleBordered NS_ENUM_DEPRECATED_IOS(2_0, 8_0, "Use UIBarButtonItemStylePlain when minimum deployment target is iOS7 or later"),
        UIBarButtonItemStyleDone,
    };用UIBarButtonItemStylePlain代替。
      

  2.   

    ios7  之后,默认样式的状态栏和导航栏是连在一起的,但是实际上导航栏的位置和大小是和之前系统版本一样的,依然是贴在状态栏下面,依然是高44px;之所以用户看来它们是连在一起,这是因为UINavigationBar里面的_UINavigationBarBackground定位在y方向-20px的位置,然后高度增加到64px,这样就可以同时充当了两者的背景。所以你需要提供高度为64px的导航条背景图。你可以通过 [UINavigationBar apperance]  来给整个应用上的所有的navigationbar添加样式,这是一个全局的样式设置。当然如果你想要给当前的某一特定的navigationbar添加特定样式就可以通过self.navigationController.navigatinoBar 找到当前bar实例,再进行样式设置。