UITabBar 自定义背景图像应用于一个视图控制器而不是 AppDelegate

Posted

技术标签:

【中文标题】UITabBar 自定义背景图像应用于一个视图控制器而不是 AppDelegate【英文标题】:UITabBar custom background image applied in one view controller instead of in the AppDelegate 【发布时间】:2014-03-18 16:57:01 【问题描述】:

我正在使用我的 iPhone 应用程序中的主题。我在标签栏中有两个标签(时间轴和设置),当用户转到第二个标签(设置)时,在设置中选择主题并选择一个主题,这会设置第一个表格视图的背景图像和导航栏的样式第一个选项卡(时间轴)中的控制器。这行得通。

我想用标签栏实现同样的效果,所以标签栏会随着背景图片和导航栏的变化而变化。

在我的时间线表视图中,我将以下代码放入 viewWillAppear:

UIImage *tabBackgroundImage = [UIImage imageNamed:@"Purplepinktopp.png"];
[[UITabBar appearance] setBackgroundImage:tabBackgroundImage];

但是,标签栏永远不会改变。更改选项卡栏的唯一方法是在 AppDelegate 中,但随后会在任何地方更改它。我需要允许用户选择一个主题并相应地更改,因此我需要在每个视图控制器的基础上进行更改,与导航栏完全相同。

在这个时间线表视图的 viewWillAppear 中,我将导航栏设置为:

UIImage *navBackgroundImage = [UIImage imageNamed:@"Purplepinknav.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

这总是有效的。这不适用于选项卡栏,但是使用上面的代码。

编辑:我已将 apperanceWhenContainedIn 添加到 viewWillAppear:

UIImage *tabBackgroundImage = [UIImage imageNamed:@"SolidPurple.png"];
[[UITabBar appearance] setBackgroundImage:tabBackgroundImage];

[UITabBar appearanceWhenContainedIn:[UITabBar class], [UITabBar class], nil];

但这似乎没有任何作用。

我该如何解决这个问题?任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您可以尝试对 UIAppearance 代理调用进行改进...

+ (id)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass,...

这会将 UIAppearance Proxy 兼容对象的外观设置为仅当它包含在特定视图控制器子类中时提供的值。

【讨论】:

非常感谢@Cocoadelica - 这真的很有帮助。这看起来很有趣。请问我如何将它应用于标签栏的 viewWillAppear ? 我已经添加了代码(并在此处更新了问题),但似乎无法找到使其正常工作的方法。非常感谢您对此的想法,感谢您抽出宝贵时间回复 我已经用 UIImage *tabBackground = [[UIImage imageNamed:@"purplytab.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [self.tabBarController.tabBar setBackgroundImage:tabBackground];非常感谢您对此的帮助。真的很感激!

以上是关于UITabBar 自定义背景图像应用于一个视图控制器而不是 AppDelegate的主要内容,如果未能解决你的问题,请参考以下文章

自定义透明UITabBar

monotouch 中的自定义 uitabbar,类似于语音备忘录应用程序

自定义 UINavigationBar 背景适用于除一个之外的所有导航控制器

在 UITabBarController 中制作自定义 UITabBar 的正确方法

UITabbar ios的背景图

UITabbar 背景图像重复出现