不透明导航栏的背景图像在 iPhone 6 上渲染不正确

Posted

技术标签:

【中文标题】不透明导航栏的背景图像在 iPhone 6 上渲染不正确【英文标题】:Background image of opaque navigation bar is rendered incorrectly on iPhone 6 【发布时间】:2015-04-23 08:48:53 【问题描述】:

当我用方法设置背景图片时

setBackgroundImage:forBarMetrics:

在 iPhone 6 上是这样渲染的

如果我将导航栏设置为translucent,它会正常拉伸。

@implementation OHCNavigationBar

- (id)initWithCoder:(NSCoder *)aDecoder 
    if(self = [super initWithCoder:aDecoder]) 
        [self setupGradient];
       
    return self;


- (instancetype)initWithFrame:(CGRect)frame 
    if(self = [super initWithFrame:frame]) 
        [self setupGradient];
    
    return self;



- (void)setupGradient 
    UIImage *gradientImage = [UIImage imageNamed:@"navigationBarBackground.png"];
   [self setBackgroundImage:gradientImage forBarMetrics:UIBarMetricsDefault];


@end

【问题讨论】:

【参考方案1】:

您可以通过将边缘设置为0来设置UINavigationBar不重复模式的背景图像。

UIImage *gradientImage32 = [[UIImage imageNamed:@"bkg_top_header_default.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:gradientImage32
                                   forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsDefault];

更新 1:

- (void)setupGradient 
    UIImage *gradientImage = [[UIImage imageNamed:@"navigationBarBackground.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)  resizingMode:UIImageResizingModeStretch];

    [self setBackgroundImage:gradientImage forBarMetrics:UIBarMetricsDefault];

希望对您有所帮助。

享受编码!

【讨论】:

@aterite 这对你有帮助吗? 不幸的是,它没有改变。我不知道,我应该设置其他插图吗? 你能贴出你的代码来设置背景图片吗,这样我可以帮你更多。 谢谢,我添加了 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch 你的问题解决了吗?如果没有,那么你应该尝试像 UIEdgeInsetsMake(0, 160, 0, 160) 这样的边缘插入,在我之前的答案中进行了更新。

以上是关于不透明导航栏的背景图像在 iPhone 6 上渲染不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用与标签栏相同的视觉效果设置导航栏的样式

在 Swift iOS 8 中设置透明导航栏和状态栏的图像底图

只有返回按钮和透明背景的导航

仅使用后退按钮和透明背景导航

iPhone 相机图像上的 3D 模型。透明背景?

切换导航栏背景图像/颜色[重复]