设置 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。