设置 viewcontroller bgcolor 时未绘制 ImageView 图像
ImageView image not being drawn when viewcontroller bgcolor is being set
运行 变成了一个奇怪的问题。在我的 HomeViewController.m 文件的 prepareForSegue 方法中,我这样做:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender {
StarViewController *nextViewController = segue.destinationViewController;
nextViewController.title = segue.identifier;
if ([segue.identifier isEqualToString:@"redDwarfSegue"]) {
//nextViewController.view.backgroundColor = [UIColor redColor];
nextViewController.starImage = [UIImage imageNamed:@"image1"];
} else {
nextViewController.view.backgroundColor = [UIColor blueColor];
nextViewController.starImage = [UIImage imageNamed:@"Image2"];
}
}
在StarViewController.h中我有一个属性类型的UIImage叫做starImage,上面的代码中引用了它。
最后,在我的 StarViewController.m 文件中,我有一个名为 starImageView 的 属性 类型的 UIImageView,我所做的就是:
-(void) viewDidLoad {
self.starImageView.image = self.starImage;
self.starImageView.contentMode = UIViewContentModeScaleAspectFill;
}
在我的HomeViewController.m中的prepareForSegue方法中,特意注释掉了这一行:
//nextViewController.view.backgroundColor = [UIColor redColor];
当转入 viewcontroller 时,image1 可以正常加载,但 image2 却不能。我所看到的只是蓝色背景色。如果我要注释掉背景颜色的设置或者翻转这两行的顺序:
nextViewController.view.backgroundColor = [UIColor blueColor];
nextViewController.starImage = [UIImage imageNamed:@"Image2"];
为此:
nextViewController.starImage = [UIImage imageNamed:@"Image2"];
nextViewController.view.backgroundColor = [UIColor blueColor];
然后就可以正常显示图像了。这是一个错误吗?或者这是操作和视图顺序以及屏幕上绘制方式的问题?抱歉,如果这还不够清楚,我很难说出确切的问题是什么。
谢谢!
我相信会发生这种情况,因为当您访问 StarViewController 的视图(使用 nextViewController.view.backgroundColor
)时,这会导致执行 viewDidLoad。如果设置图像值的行在该行之后,那么当 viewDidLoad 运行时,starImage 将为 nil。
运行 变成了一个奇怪的问题。在我的 HomeViewController.m 文件的 prepareForSegue 方法中,我这样做:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender {
StarViewController *nextViewController = segue.destinationViewController;
nextViewController.title = segue.identifier;
if ([segue.identifier isEqualToString:@"redDwarfSegue"]) {
//nextViewController.view.backgroundColor = [UIColor redColor];
nextViewController.starImage = [UIImage imageNamed:@"image1"];
} else {
nextViewController.view.backgroundColor = [UIColor blueColor];
nextViewController.starImage = [UIImage imageNamed:@"Image2"];
}
}
在StarViewController.h中我有一个属性类型的UIImage叫做starImage,上面的代码中引用了它。
最后,在我的 StarViewController.m 文件中,我有一个名为 starImageView 的 属性 类型的 UIImageView,我所做的就是:
-(void) viewDidLoad {
self.starImageView.image = self.starImage;
self.starImageView.contentMode = UIViewContentModeScaleAspectFill;
}
在我的HomeViewController.m中的prepareForSegue方法中,特意注释掉了这一行:
//nextViewController.view.backgroundColor = [UIColor redColor];
当转入 viewcontroller 时,image1 可以正常加载,但 image2 却不能。我所看到的只是蓝色背景色。如果我要注释掉背景颜色的设置或者翻转这两行的顺序:
nextViewController.view.backgroundColor = [UIColor blueColor];
nextViewController.starImage = [UIImage imageNamed:@"Image2"];
为此:
nextViewController.starImage = [UIImage imageNamed:@"Image2"];
nextViewController.view.backgroundColor = [UIColor blueColor];
然后就可以正常显示图像了。这是一个错误吗?或者这是操作和视图顺序以及屏幕上绘制方式的问题?抱歉,如果这还不够清楚,我很难说出确切的问题是什么。
谢谢!
我相信会发生这种情况,因为当您访问 StarViewController 的视图(使用 nextViewController.view.backgroundColor
)时,这会导致执行 viewDidLoad。如果设置图像值的行在该行之后,那么当 viewDidLoad 运行时,starImage 将为 nil。