使用 UINavigationController 默认 UIToolbar 的自定义背景

Posted

技术标签:

【中文标题】使用 UINavigationController 默认 UIToolbar 的自定义背景【英文标题】:Use custom background with UINavigationController default UIToolbar 【发布时间】:2010-09-06 14:15:17 【问题描述】:

我想为我的 UIToolbar 使用我自己的背景。

要使用 UINavigationBar 来做到这一点,我刚刚使用了这个类别并覆盖了 drawRect 方法:

    @implementation UIToolbar (CustomImage)

    - (void)drawRect:(CGRect)rect 
         UIImage *image = [UIImage imageNamed: @"nm010400.png"];
         [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    
    @end

这段代码非常适用于 UINavigationBar,但这不适用于包含在 UINavigationController 中并通过此行代码启用的 UIToolbar:

self.navController.toolbarHidden = NO;

谁能帮我解决这个问题?我确定 UINavigationController 使用标准 UIToolbar 那么为什么这不起作用?!?谢谢

【问题讨论】:

【参考方案1】:

要创建自定义 UI 元素,不再需要创建类别。使用 ios 5,您可以通过 UIApperance 协议更改任何 UI 元素的外观。您可以像往常一样更改单个 UI 元素,但真正的力量来自于创建主题应用程序。使用这个新协议,您可以更改特定 UI 元素的所有实例的样式,甚至可以更改特定设置中的 UI 元素的样式,例如 UINavigationController 中的 UIBarButtonItem。

要更改应用程序中所有 UINavigationBars 的外观,您可以像这样设置背景,

[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"myNavBar.png"] forBarMetrics:UIBarMetricsDefault];

您可以根据您使用的元素更改不同的属性来更改您可以使用的 UINavigationBar 的标题属性,

[[UINavigationBar appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor whiteColor], UITextAttributeTextColor, 
  [UIFont fontWithName:@"MarkerFelt-Thin" size:24], UITextAttributeFont, nil]];

您还可以在其他 UI 元素上使用它,以便更改您可以调用的 UIToolbar 的所有实例的背景

[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"myToolBar.png"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

希望这会有所帮助。

【讨论】:

【参考方案2】:

在您的自定义 UINavigationController 的 viewDidLoad 中使用以下代码:

[self.toolbar setBackgroundImage:[UIImage imageNamed:@"mytoolbarbg.png"] 
              forToolbarPosition:1 
              barMetrics:UIBarMetricsDefault];

【讨论】:

以上是关于使用 UINavigationController 默认 UIToolbar 的自定义背景的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationcontroller 中未使用的视图会发生啥?

使用 push segue 时 UINavigationController 是不是强制

UINavigationController - 使用 UIBlurEffect 清除背景

一起使用 UITabBarController 和 UINavigationController

iPhone - UINavigationController - 使用 CATransaction 自定义动画

如何在 SwiftUI 中使用 UINavigationController