UINavigationBar外观背景图像在iOS 7.1中重复和模糊

时间:2014-03-20 10:46:46

标签: ios uinavigationbar uiappearance ios7.1

我认为现有项目和iOS7.1存在一个有趣的问题。我的代码工作正常并正常运行;因为在我的设备上更新XCode和我的iOS有一个问题,导航栏中用于该项目的透明背景图像现在呈现两次,一次是正确的大小并再次被炸毁和模糊。代码仅通过app委托中的[UINavigationBar appearance] api添加图像。要检查这不是我的代码的特定错误,我使用主要细节默认创建默认的xcode项目,将其设置为仅iPhone,添加一些新创建的图像并使用应用程序委托中的相同调用设置它们。这个项目有同样的问题,在这里是github:

UINavigationBarBug github source

这是相关的代码块:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TLS.png"]
                                       forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setBarTintColor:RGB(233, 155, 20)];
    [[UINavigationBar appearance] setTintColor:RGB(245, 245, 245)];

    return YES;
}

问题的截图:

Navigation Bar image problem

查看转换文档我在这里做的应该没问题,44点高的导航栏应该水平缩放而不是垂直缩放。我也很确定在更新之前这个问题从未发生过(在将代码上传到苹果审核之前,内部QA会发现它。)

有两件事可以解决它:

1)使用不透明的图像,如果仍有问题,则会加载“正确的”图像,因为缺少透明度会覆盖错误渲染的图像。

2)使用66点高的导航栏(在项目中可用顶部透明部分作为TLS-ios7),更改应用委托中的代码以使用它来解决问题。

有谁能告诉我这里发生了什么?这是一个错误,是我的错,是否有一些文档告诉我为什么会这样?

谢谢!

**更新:我最近发现iPad还在运行iOS 7.0,这个问题不会发生。 **

5 个答案:

答案 0 :(得分:2)

我的应用上遇到了类似的问题。我通过设置"半透明"解决了它。我的UINavigationBar对NO。

[self.navigationController.navigationBar setTranslucent:NO];

答案 1 :(得分:1)

我刚刚在我的错误报告中收到了这个... tl;博士我提供的图像高度不正确:

iOS 7.1的解决方法是指定具有非零插入的可调整大小的图像。如果内部UINavigationBar尺寸不合适,那么UINavigationBar会在内部平铺你的图像,这基本上就是这里发生的事情 - 因为图像不够高(导航栏顶部附着,所以图像需要是64pt高而不是44pt)它会平铺。如果将其设置为拉伸并配置cap insets,使其仅拉伸均匀的像素,则应该能够避免此问题。

答案 2 :(得分:0)

我有一个类似的问题,事实证明我在资产目录中没有正确的图像资产。我只有视网膜资产,但是当我进口时,他们进入了资产目录中的1x盒子 - 将它们移动到2x盒子里为我修复了导航栏。

答案 3 :(得分:0)

我有类似的问题,我有一个透明背景的徽标。身高很好。在彩色背景中添加并且问题已停止。

答案 4 :(得分:0)

您可以通过定义左上角和上限来禁用图像拉伸。 这是一个Swift 3解决方案:

let navbarImage = image.stretchableImage(withLeftCapWidth: 1, topCapHeight: 1)
UINavigationBar.appearance().setBackgroundImage(navbarImage, for: .default)

之前的例子: enter image description here

并在修复之后: enter image description here