自定义 UINavigationController UINavigationBar

4
基本上我想要一个自定义的UINavigationBar。我不想让它像照片应用程序一样"半透明"或其他什么。
我基本上想完全删除它,但当导航控制器被推送时,我仍然希望能够添加返回按钮等,并且我希望视图(例如:UITableViewController)被推到下面。
像这样: alt text 有任何想法如何实现这一点吗?
谢谢。
4个回答

6
@implementation UINavigationBar (background)

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

@end

基本上,它并不是完全透明的 - 这只是一种视觉谎言。要实现真实的效果,唯一的方法是覆盖UINavigationBardrawRect:方法,如上所示。

覆盖类别中的方法被认为是不良实践。 - Justin
先生,还有其他的方法吗? - Thomas Clayson
抱歉,我应该提供这个替代方案而不是仅仅批评旧的帖子:您可以在适当的UINavigationBar子类中覆盖drawRect:,然后将其设置为您的UINavigationController的导航栏的类。但是,唯一“官方”的设置该类的方法是通过XIB。 - Justin
好的,没关系。没有办法在程序中动态修改UINavigationController导航栏的类吗? - Thomas Clayson
不是通过官方API,但是有解决方法 - Justin

5

如果您选择使用UINavigationBar,想要透过它看到后面的内容,只需要:

self.navigationController.navigationBar.translucent=YES;

如果您想让它看起来像您发布的图片,您需要更改色调/颜色以匹配背景。


那只是让它半透明...没关系,我找到了另一种方法...看看我的答案。 - Thomas Clayson

1

在您的AppDelegate子类中,将UINavigationBar添加如下:

@interface CustomNavBar : UINavigationBar

@end

@implementation CustomNavBar

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

然后在AppDelegate中进行以下操作:

//Set custom NavigationBar
[self.navController setValue:[[CustomNavBar alloc]init] forKeyPath:@"navigationBar"];
//Set tint to match bar.png
self.navController.navigationBar.tintColor = [UIColor colorWithRed:0.93 green:0.43 blue:0 alpha:1];
//Set font for NavigationBar
[self.navController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Comfortaa-Bold" size:20], UITextAttributeFont, nil]];

这将使您对UINavigationController的外观和感觉获得更多控制。


0
很难说,可能是 UINavigationBar 存在且颜色与 UIView 背景匹配,或者根本没有 UINavigationBar,只是一个带有自定义按钮和顶部的 UILabel 视图。选择一种方法并编写代码,或者再次提出更具体的问题。

我不知道如何更详细地说明。我想要一个透明的导航栏。我是不是必须创建自己的导航栏样式元素?如果是这样,那么我如何知道我是否在根视图控制器上?如果我不在根视图控制器上,我可以在视图中添加一个“返回”按钮,对吗? - Thomas Clayson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接