gpt4 book ai didi

objective-c - 如何在应用程序中各处设置导航栏图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:48:37 27 4
gpt4 key购买 nike

我正在构建一个带有 Storyboard的应用。现在我希望在我的应用程序的每个屏幕上都有相同的 topBar/navigationbar。我想在此导航栏上设置图像。经过一番搜索,我找到了这段代码。

@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect
{
UIImage *image = [UIImage imageNamed: @"topbar.jpg"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

我已将它放在我的 appdelagate.M 文件中实现的正上方。但它不起作用。还有人知道这是否也适用于 IOS 5.1?

亲切的问候。

最佳答案

查看UIAppearance。它允许您更改整个 UI 类的属性。例如,我在一个应用程序中有这个:

UIImage *img = [UIImage imageNamed: @"NavBarBackground.png"];
[[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];

UIAppearance 是在 iOS 5 中引入的。执行此操作的“旧”方法是覆盖 -drawRect: 使用相关类的类别(例如 UINavigationBar),就像你做的那样。 (“Swizzling”——将您的方法替换为 SDK 提供的方法——顺便说一句,这不是必需的。)

我发现,当 iOS5 出来时,drawRect 技巧不起作用,所以我不得不通过将上述代码包含在 中来有条件地使用 UIAppearance >if 语句如下:

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
...
}

为什么是有条件的?我们继续支持 iOS4,因此如果我们不条件化此 UIAppearance 内容,iOS4 用户将会遇到崩溃。因此,我们在应用程序中同时拥有此解决方案和 drawRect 解决方案!

如果您不必支持 iOS4,您一定要查看 UIAppearance 以实现您的目标。

关于objective-c - 如何在应用程序中各处设置导航栏图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12962531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com