菜鸟教程小白 发表于 2022-12-12 23:12:30

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


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

<pre><code>@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect
{
    UIImage *image = ;
    ;
}
@end
</code></pre>

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

<p>亲切的问候。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>查看 <code>UIAppearance</code>。它允许您更改整个 UI 类的属性。例如,我在一个应用中有这个:</p>

<pre><code>UIImage *img = ;
[ setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
</code></pre>

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

<p>我发现,当 iOS5 出现时,<code>drawRect</code> 技巧不起作用,所以我必须有条件地使用 <code>UIAppearance</code>,将上面的代码包含在 <code>if</code> 语句如下:</p>

<pre><code>if ([ respondsToSelector:@selector(appearance)]) {
    ...
}
</code></pre>

<p>为什么是有条件的?我们继续支持 iOS4,所以如果我们不对 <code>UIAppearance</code> 内容进行条件化,iOS4 用户会遇到崩溃。因此,我们在应用程序中同时拥有了这个和 <code>drawRect</code> 解决方案!</p>

<p>如果你不必支持 iOS4,你绝对应该看看 <code>UIAppearance</code> 来实现你的目标。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 如何在应用程序的各处设置导航栏的图像,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12962531/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12962531/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 如何在应用程序的各处设置导航栏的图像