【问题标题】:Setting up a custom Nav Bar with Storyboards使用 Storyboards 设置自定义导航栏
【发布时间】:2013-04-30 14:45:35
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 外观代理是如何设置导航栏的样式。你正在做的应该有效。
  • didFinishLaunchingWithOptions方法中使用AppDelegate.m中的代码,这样您就可以将任何导航栏添加到任何vc
  • 注意:问题已解决,但我无法回答自己的问题或将其删除。
  • 解决方案是什么?
  • 我错误地覆盖了我所拥有的课程,删除它使其正常工作。

标签: ios ios5 uinavigationcontroller uinavigationbar uinavigationitem


【解决方案1】:

好吧,我可以告诉你什么对我有用:

navigationBar 和 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 分配给您自己的。

【讨论】:

  • 太老套了。不要这样做。通过UIAppearance 代理内置了对皮肤控件的支持。
  • 我想我还是老样子。
  • 以旧的方式做事并没有错,但这是一种不受支持的方法,它很脆弱并且随时可能崩溃——Apple 不保证其任何属性都符合键值编码。
  • 这对我来说真的不起作用。 rootViewController 不以这种方式尊重它的 UIBarButtonItems。我认为是因为它使用编码器进行了初始化,然后在不处理之前存在的按钮的情况下重新实例化。如果我错了,请纠正我。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你可以试试这样的:

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

    【讨论】:

    • 这是一个相当老的问题,我们从这个开始。但这将是在这里采取的正确方法,因此接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多