UIViewController为啥设置不了背景颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIViewController为啥设置不了背景颜色相关的知识,希望对你有一定的参考价值。

参考技术A 状态栏的字体为黑色:UIStatusBarStyleDefault状态栏的字体为白色:UIStatusBarStyleLightContent一、在info.plist中,将View controller-based status bar appearance设为NO状态栏字体的颜色只由下面的属性设定,默认为白色:// default is UIStatusBarStyleDefault[UIApplication sharedApplication].statusBarStyle解决个别vc中状态栏字体颜色不同的办法1、在info.plist中,将View controller-based status bar appearance设为NO.2、在app delegate中:[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;3、在个别状态栏字体颜色不一样的vc中-(void)viewWillAppear:(BOOL)animated[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;-(void)viewWillDisappear:(BOOL)animated[super viewWillDisappear:animated];[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;二、在info.plist中,将View controller-based status bar appearance设为YES,或者没有设置。View controller-based status bar appearance的默认值就是YES。如果View controller-based status bar appearance为YES。则[UIApplication sharedApplication].statusBarStyle 无效。用下面的方法:1、在vc中重写vc的preferredStatusBarStyle方法。-(UIStatusBarStyle)preferredStatusBarStylereturn UIStatusBarStyleDefault;2、在viewDidload中调用:[self setNeedsStatusBarAppearanceUpdate];但是,当vc在nav中时,上面方法没用,vc中的preferredStatusBarStyle方法根本不用被调用。原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,只会调用navigation controller中的preferredStatusBarStyle方法,vc中的preferredStatusBarStyley方法跟本不会被调用。解决办法有两个:方法一:设置navbar的barStyle 属性会影响status bar 的字体和背景色。如下。//status bar的字体为白色//导航栏的背景色是黑色。self.navigationController.navigationBar.barStyle = UIBarStyleBlack;//status bar的字体为黑色//导航栏的背景色是白色,状态栏的背景色也是白色。//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;方法二:自定义一个nav bar的子类,在这个子类中重写preferredStatusBarStyle方法:MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];self.window.rootViewController = nav;@implementation MyNav- (UIStatusBarStyle)preferredStatusBarStyleUIViewController* topVC = self.topViewController;return [topVC preferredStatusBarStyle];

从 UIViewController 设置 UIView 的背景颜色

【中文标题】从 UIViewController 设置 UIView 的背景颜色【英文标题】:setting a background color of an UIView from an UIViewController 【发布时间】:2010-12-08 21:33:41 【问题描述】:

我有一个 UIView 子类,它使用以下代码绘制一个简单的矩形:

- (void)drawRect:(CGRect)rect 

//Get the CGContext from this view
CGContextRef context = UIGraphicsGetCurrentContext();

CGColorRef myColor = [UIColor colorWithHue:0 saturation:1 brightness:0.61 alpha:1].CGColor;
//Draw a rectangle
CGContextSetFillColorWithColor(context, myColor);
//Define a rectangle
CGContextAddRect(context, CGRectMake(0, 0, 95.0, 110.0));
//Draw it
CGContextFillPath(context);

然后,我有一个单独的 UIViewController,里面有一个 UISlider

-(IBAction) sliderChanged:(id) sender

UISlider *slider = (UISlider *)sender;
int sliderValue = (int)[slider value];
float sliderFloat = (float) sliderValue;

NSLog(@"sliderValue ... %d",sliderValue);
NSLog(@"sliderFloat ... %.1f",sliderFloat / 100);

在这里,在sliderChanged 中,我希望能够动态更改UIView 子类中正在绘制的矩形的背景颜色。我应该如何实现这个?

谢谢!

【问题讨论】:

【参考方案1】:

创建一个包含 UIColor(或 CGColor)值的 UIView 子类的属性:

在标题中:

@interface MySub : UIView 
NSColor* rectColor;


@property (retain) NSColor* rectColor;
@end

在实现文件中:

@implementation MySub
@synthesize rectColor
@end

您现在可以使用 myViewInstance.rectColor = SomeNSColor; 设置颜色

设置颜色后,您必须重新绘制视图才能使用新的背景颜色绘制矩形:

[myViewInstance setNeedsDisplay];

【讨论】:

尝试添加 NSColor 行“NSColor 之前的预期说明符限定符列表”时出现编译器错误。我可以改用 UIColor 吗? 糟糕,抱歉。没有意识到你在iOS上。当然可以。 NSColor 只是 OSX 上的 UIColor 对应物。 谢谢,我想通了。现在在我的 sliderChanged 函数中,我正在尝试这样做: CGColorRef myColor = [UIColor colorWithHue:0.3 饱和度:0.3 亮度:0.3 alpha:1].CGColor; drawTest.rectColor = myColor;但我得到“访问未知的'setRectColor'类方法”。我确定我在某处遗漏了一步。 您是否引用了 UIView 或您的子类?如果您有一个实际上是 YourSubclass* 的 UIView*,您需要将其转换为 YourSubclass* 或使用 [myInstance setRectColor:myColor];另外,不要忘记@synthesize-declaration。

以上是关于UIViewController为啥设置不了背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

Swift开发教程--设置UIViewController的背景透明

为啥我不能在 Swift 中使用从一个 UIViewController 传递到另一个(在控制台中打印数据)的数据设置标签?

ios h5 input 的font-size设置为0.0001rem为啥在ios系统下输入不了

为啥识别不了二维码

以清晰的背景呈现 UIViewController

使用 UIAppearence 更改 UIViewController 的直接子视图的背景颜色