iOS导航视图背景图片UIViewContentModeScaleAspectFill无法正常工作

时间:2016-03-31 14:12:00

标签: ios objective-c uinavigationcontroller

使用下面的代码,我在UINavigationController(视图,而不是导航栏)中添加了背景图像,我正在尝试缩放图像以填充视图,因为我不知道用户的设备和方向。 (注意:我不想创建特定于设备或方向的尺寸/分辨率,因为我的背景图像可能会发生变化,因此需要花费太多时间。)

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%@", NSStringFromCGRect(self.navigationController.view.frame));

    // Set background image
    NSString *filename = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"assets/images/wallpaper.jpg"];
    self.background = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:filename]];
    self.background.contentMode = UIViewContentModeScaleAspectFill;
    self.background.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    self.background.center = CGPointMake(CGRectGetMidX(self.navigationController.view.frame), CGRectGetMidY(self.navigationController.view.frame));
    [self.navigationController.view insertSubview:self.background atIndex:0];
}

支持UIViewContentModeScaleAspectFill和UIViewAutoresizingFlexibleHeight / Width以使图像缩放以填充屏幕,而不管屏幕大小和方向如何。但是,我需要帮助解决模拟器上的问题:iOS的行为会有所不同,具体取决于模拟器是以纵向/横向模式启动的。

下图显示了应用程序以纵向模式启动然后旋转为横向时会发生什么。在纵向中,图像未缩放以填充视图(图像上方/下方有黑条)。在横向中,图像被正确缩放以填充视图。

image1

下图显示了应用程序在横向启动然后旋转为纵向时会发生什么。在横向中,图像未缩放以填充视图(图像的两侧有黑条)。在纵向中,图像被正确缩放以填充视图。

image2

为什么iOS处理这两种情况的方式不同,为什么图像没有正确缩放以填充视图?如何让UIViewContentModeScaleAspectFill正常工作?

1 个答案:

答案 0 :(得分:1)

将我的评论作为答案重新发布,以便您可以将此问题标记为已解决。

您未设置UIImageView的初始frame。尝试像

这样的东西
- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    self.background.frame = self.navigationController.view.bounds;
    [self.navigationController.view insertSubview:self.background atIndex:0];
}