iOS 为所有视图控制器 self.view 设置背景颜色

Posted

技术标签:

【中文标题】iOS 为所有视图控制器 self.view 设置背景颜色【英文标题】:iOS set background color for all viewcontroller self.view's 【发布时间】:2012-11-15 13:34:05 【问题描述】:

有没有办法为所有视图设置相同的背景图像?

在所有viewDidLoad: 方法中设置相同的背景。这不酷。

【问题讨论】:

只有一行代码,复制粘贴即可。你有多少浏览量? 循环遍历所有子视图并应用背景是我能想到的唯一方法。 您确定不想将其背景颜色设置为透明并为容器视图设置一次颜色吗? 现在您有一些选择。不满意的话,做一个红色背景的抽象子类,让所有的vc都继承自那个对象。 【参考方案1】:

您可以创建一个自定义类,我们称它为 TemplateView,它是 UIView 的子类。 然后使用 xib/storyboards 选择控制器视图和身份检查器将 Class 属性更改为“TemplateView”。

随后使用 UIAppearance 将模板视图的背景颜色更改为所需的颜色。

 [[TemplateView appearance]setBackgroundColor:[UIColor blueColor]];

这将改变项目中每个模板视图的背景颜色。 我认为这是比

更好的解决方案
[[UIView appearance] setBackgroundColor:[UIColor redColor]];

因为我们不会改变所有东西的背景,只是我们的自定义类。 希望它会有所帮助。

【讨论】:

这是一个比接受的答案更好的答案。为所有 UIView 提供背景会产生许多意想不到的副作用。【参考方案2】:

是的,在 ios5+ 中使用 UIAppearance

[[UIView appearance] setBackgroundColor:[UIColor redColor]];

注意:UIView 符合 <UIAppearance, UIAppearanceContainer> 协议,但由于某种原因没有将任何属性标记为 UI_APPEARANCE_SELECTOR

【讨论】:

true,但这将为 UIView 子类的所有子视图(几乎所有内容)设置背景,包括按钮、标签等...【参考方案3】:

我认为这不是一个好主意,但如果你真的想这样做,你可以这样做:

- (void)setBGColor:(UIColor *)color forAllSubviewsOf:(UIView *)view

    [view setBackgroundColor:color];
    for (UIView *sub in view.subviews)
        [self setBGColor:color forAllSubviewsOf:sub];

【讨论】:

【参考方案4】:

我猜你可以使用 Method Swizzling 类的一些功能来更改所有视图的颜色或图像设置。

查看关注

https://wiredcraft.com/blog/method-swizzling-ios/

【讨论】:

以上是关于iOS 为所有视图控制器 self.view 设置背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

用于设置自动布局约束的 iOS 视图层次结构

[self.view addSubview:myView.view];奇怪的行为

在 iOS 单视图应用程序中,self.view.bounds 最早设置正确的时间是啥时候?

self.view.frame 在横向模式下意外更改大小

iOS:从顶视图到底视图拦截点击手势事件

添加滚动视图时,所有视图都显示在导航栏后面的self.view顶部