自定义 uinavigatonbar 异常

发布于 2024-10-10 06:24:13 字数 384 浏览 5 评论 0原文

我用这种方式制作了一个自定义导航栏:

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

现在,当我将特定的视图控制器加载到导航控制器中时,我想添加异常以显示正常的导航栏。

我该如何编码该异常?

I've made a custom uinavigation bar this way:

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

Now I'd like to add exception to show the normal uinavigation bar when i load an specific viewcontroller into de navigationcontroller.

How can I code that exception?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜味拾荒者 2024-10-17 06:24:13

我认为 UINavigationBar 上的类别不可能实现这一点。
我建议使用一个子类,例如 CustomNavigationBar

.h

#import <UIKit/UIKit.h>

@interface CustomNavigationBar : UINavigationBar {
}
@end

.m

#import "CustomNavigationBar.h"

@implementation CustomNavigationBar

- (void)drawRect:(CGRect)rect {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

棘手的是,您永远不会自己创建 UINavigationBar ,它都是由 UIKit 处理的。要仅更改某些栏的外观,您必须在运行时手动更改它们的类。

导入

#import <objc/runtime.h>

并在您的视图控制器中(例如在 viewDidLoad 中),添加

object_setClass(self.navigationController.navigationBar, [CustomNavigationBar class]);

I don't think that's possible with a category on UINavigationBar.
I would suggest a subclass, say CustomNavigationBar

.h

#import <UIKit/UIKit.h>

@interface CustomNavigationBar : UINavigationBar {
}
@end

.m

#import "CustomNavigationBar.h"

@implementation CustomNavigationBar

- (void)drawRect:(CGRect)rect {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

The tricky thing is that you never create a UINavigationBar yourself, it's all handled by UIKit. To change the appearance of some bars only, you'll have to manually change their class at runtime.

Import

#import <objc/runtime.h>

And in your view controller (in viewDidLoad for example), add

object_setClass(self.navigationController.navigationBar, [CustomNavigationBar class]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文