使用 Storyboards 设置自定义导航栏
Posted
技术标签:
【中文标题】使用 Storyboards 设置自定义导航栏【英文标题】:Setting up a custom Nav Bar with Storyboards 【发布时间】:2013-04-30 14:45:35 【问题描述】:我正在尝试研究如何使用情节提要设置自定义导航栏。我已将导航栏直接添加到我的应用程序的视图控制器中。
VC 不直接在导航控制器堆栈中,但会按原样显示。有点像应用程序的要点。应用程序将使用相同的导航栏。
我想为整个应用程序中的导航栏设置样式。以前我在导航控制器中使用以下内容,但现在不是,也不会在不需要的情况下实际保留在导航堆栈中。
[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault];
现在它是一个简单地添加到 VC 中的项目,设置此样式的正确方法是什么?该栏也将添加到其他 VC,因此它应该可以重复使用。我试图继承 UINavigationBar 并在故事板中为导航栏更改它,但不确定如何实现样式。
我尝试更改此子类的 drawRect 方法,但没有发生更改。我无法直接从 Apple 找到任何关于如何对其进行子类化和添加样式的文档。
【问题讨论】:
外观代理是如何设置导航栏的样式。你正在做的应该有效。 在didFinishLaunchingWithOptions
方法中使用AppDelegate.m
中的代码,这样您就可以将任何导航栏添加到任何vc
注意:问题已解决,但我无法回答自己的问题或将其删除。
解决方案是什么?
我错误地覆盖了我所拥有的课程,删除它使其正常工作。
【参考方案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];
【讨论】:
这是一个相当老的问题,我们从这个开始。但这将是在这里采取的正确方法,因此接受答案。以上是关于使用 Storyboards 设置自定义导航栏的主要内容,如果未能解决你的问题,请参考以下文章