ios - 设置导航栏外观

标签 ios uinavigationcontroller uinavigationbar

我应该在哪里设置导航栏的外观?

我有一个名为“MainVC”的 View Controller ,它嵌套在导航 Controller 中。在“MainVC”中,我覆盖了 viewWillAppear 并将我的导航 Controller 的导航栏的背景颜色设置为黄色。但是,当我启动该应用程序时,颜色并未设置为黄色

当我离开 MainVC 导航到另一个 VC,然后返回 MainVC 时,颜色设置正确!!

为什么会这样,我应该在哪里添加代码以便在 MainVC 中正确设置导航栏的背景颜色?

谢谢!

最佳答案

如果您将导航外观项放在 mainVC 的 init 方法以及您的 ViewWillAppear 中,它将起作用,如下所示:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self==nil)
        return nil;
    [[[self navigationController] navigationBar] setTranslucent:YES];
    [[[self navigationController ] navigationBar] setBarTintColor:[UIColor clearColor]];
    return self;
}

-(void)viewWillAppear:(BOOL)animated
{
     [super viewWillAppear:animated];
     [[[self navigationController] navigationBar] setTranslucent:YES];
     [[[self navigationController ] navigationBar] setBarTintColor:[UIColor clearColor]];
}

无需设置任何其他内容,只需将其全部保存在您的 mainVC 的实现文件中即可,祝您好运。哦,是的,另一方面,这就是为什么这样做:

ViewDidLoad 将在导航堆栈中被调用一次,直到它从堆栈中弹出,因此您使用导航 Controller 所需的属性初始化 View Controller ,您可以对每个 View Controller 执行此操作以控制 navigaiotnbar 的看法。将它放在 init 方法中,在 View 加载到屏幕之前设置它,然后将它放在你的 viewWillAppear 中设置它,这样当你从 View Controller 转换到堆栈上的 View Controller 时,假设这个 View Controller 是仍在堆栈上, viewWillAppear 会将导航栏更改回您想要的样式。所以,这个 View Controller 第一次加载到堆栈上时,导航栏样式会发生两次,没什么大不了的,但从那时起,它只会在导航堆栈上再次出现时发生一次.

关于ios - 设置导航栏外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32063891/

相关文章:

ios - UINavigationBar 中的透明图像

swift - iOS13导航栏后退栏按钮item tint颜色

swift - 当固定在 UINavigationBar 下方时,UISearchBar 没有居中

ios - 递归函数,带有完成 block ,检索多个 MKDirections - Swift

ios - 使用 iOS Facebook SDK 发布到 friend 墙

ios - AFNetworking 能否同步返回数据(在 block 内)?

ios - 向 mapView 添加一个按钮并点击它会抛出 EXC_BAD_ACCESS

ios - 后退按钮不会在导航栏中更改颜色

ios - 将 UITableViewController 推送到导航堆栈时看不到导航栏

ios - UINavigationBar 上方的标题