繁体   English   中英

在loadView中设置UIView的backgroundColor无效

[英]Setting UIView's backgroundColor in loadView has no effect

我在iOS 7应用中有一个UIDatePicker 它被添加到视图控制器(子类)中,并且由于背景为黑色,因此几乎不可读。 (日期选择器需要浅色背景。)

- (void)loadView
{
    self.datePicker = [[UIDatePicker alloc] init];
    ...
    [self.view addSubview:self.datePicker];

    // When placed here, without viewDidAppear, background remains black/transparent
    self.view.backgroundColor = [UIColor whiteColor];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // When places here, the background becomes indeed white.
    self.view.backgroundColor = [UIColor whiteColor];
}

我当然可以在loadView设置日期选择器本身的背景颜色,这就是我最终要做的。

但是我仍然不明白为什么在loadView设置超级视图的背景颜色不起作用。

您应该使用-viewDidLoad而不是-loadView

如所述文档所述,只要访问viewcontrollers的view属性并且view属性为nil就会调用loadView 如果NIB与控制器关联,则他的方法将从NIB加载视图,否则将创建视图。

该文档还指出,如果您的自定义实现不应调用super,但这将需要您创建自己的视图。

self.view = [UIView new]

没有self.view因为您没有调用[super loadView]; ,调用super将为您创建视图。 但是,如果要覆盖此方法,则应创建自己的视图。 如文档中所述。

最好是在从NIB,情节提要或以编程方式加载视图时使用此调用的viewDidLoad

-(void) viewDidLoad{
    self.datePicker = [[UIDatePicker alloc] init];

    [self.view addSubview:self.datePicker];

    self.view.backgroundColor = [UIColor whiteColor];
}

您可能应该在-viewWillAppear:设置背景颜色。 来自的文档
-[UIViewController loadView]

当请求其视图属性但当前为nil时,视图控制器将调用此方法。 此方法加载或创建视图,并将其分配给view属性。

今天我没有测试过,但我看是这样说的self.viewnil ,当-loadView被调用,直到你把它明确。 覆盖-loadView是自定义UIViewControllerview属性,大概是使用UIView的特定子类,而不是泛型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM