1

我正在尝试研究如何使用情节提要设置自定义导航栏。我已将导航栏直接添加到我的应用程序的视图控制器中。

VC 不直接在导航控制器堆栈中,但会按原样显示。有点像应用程序的要点。应用程序将使用相同的导航栏。

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

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

现在它只是添加到 VC 中的一个项目,正确的样式方法是什么?该栏也将添加到其他 VC,因此它应该可以重复使用。我试图继承 UINavigationBar 并在故事板中为导航栏更改它,但不确定如何实现样式。

我试图更改此子类的 drawRect 方法,但没有发生更改。我无法直接从 Apple 找到任何关于如何对其进行子类化和添加样式的文档。

4

3 回答 3

2

在 Xcode 5(可能还有 4)中,您可以将 UINavigationController 的 UINavigationBar 的类更改为您自己的自定义类。然后根据需要在 initWithCoder: 中添加您的自定义设置。

于 2014-04-30T20:19:36.907 回答
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;
}

在您的 StoryBoard 中,您将 UINavigationController 分配给您自己的。

于 2013-04-30T14:54:31.293 回答
1

您可以尝试以下方法:

[[UINavigationBar appearanceWhenContainedIn:[YourViewController1 class],
                                            [YourViewController2 class],  nil]  
                         setBackgroundImage:[UIImage imageNamed:@"YourImageName"] 
                              forBarMetrics:UIBarMetricsDefault];
于 2013-04-30T15:20:57.563 回答