1

我想解决如何设置故事板的自定义导航栏。我在应用程序中直接添加了导航栏到视图控制器。设置故事板的自定义导航栏

VC并不直接位于导航控制器堆栈中,但会以原样显示。作为应用程序的主要点。通过应用程序将使用相同的导航栏。

我想在整个应用程序中设置导航栏的样式。以前我在导航控制器中使用了以下内容,但现在不是,因为不需要,它们实际上不会保留在导航堆栈中。

[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault]; 

什么是正确的样式这种方式现在它是一个项目简单地添加到VC?酒吧也将被添加到其他风险投资者,所以它应该是可重用的。我曾尝试过UINavigationBar的子类,并在导航栏的故事板中更改它,但不知道如何实现样式。

我试图改变这个子类的drawRect方法,但没有发生变化。我无法直接从Apple找到任何文档,以了解如何创建子类并添加样式。

+1

外观代理是如何设置导航栏的样式。你在做什么应该工作。 – memmons 2013-04-30 14:49:44

+1

在'didFinishLaunchingWithOptions'方法中的'AppDelegate.m'中使用你的代码,这种方式可以将任何导航栏添加到任何vc – 2013-04-30 14:51:38

+1

注意:问题已解决,但我无法回答自己的问题或删除此问题。 – StuartM 2013-04-30 16:22:47

回答

1

你可以尝试这样的:

[[UINavigationBar appearanceWhenContainedIn:[YourViewController1 class], 
              [YourViewController2 class], nil] 
         setBackgroundImage:[UIImage imageNamed:@"YourImageName"] 
           forBarMetrics:UIBarMetricsDefault]; 
+0

现在这是一个相当古老的问题,我们从这里开始。但这是采取正确的方法,因此接受答案。 – StuartM 2014-05-01 12:28:44

2

好吧,我可以告诉你我什么工作:

子类的导航栏和UINavigationController的太多,所以在它的initWithCoder你的setValue指派方式:forKey

- (id)initWithCoder:(NSCoder *)aDecoder { 
    if(!(self = [super initWithCoder:aDecoder])) return nil; 

    CDANavigationBar *navBar = [[CDANavigationBar alloc] init]; 
    [self setValue:navBar forKey:@"navigationBar"]; 

    return self; 
} 

在你的故事板分配UINavigationController给你自己的。

+0

所以哈克。不要这样做。通过'UIAppearance'代理内置支持蒙皮控制。 – memmons 2013-04-30 14:56:55

+0

我想我坚持以前的方式。 – crisisGriega 2013-04-30 15:02:07

+0

以旧的方式做事没什么问题,但这是一种不受支持的方法,它很脆弱,随时可能会中断 - Apple不保证其任何属性都符合关键值编码。 – memmons 2013-04-30 16:09:40

2

在Xcode中5(和可能4),你可以在类的UINavigationController的UINavigationBar的更改为自己的自定义类。然后根据需要在initWithCoder:中添加自定义项。