我试图通过使用NSLayoutConstraint
来避免检测我是使用iPhone 4还是5屏幕尺寸。这是我的代码:
UIImageView *backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Flow-02"]];
[self.view addSubview:backgroundImage];
[self.view sendSubviewToBack:backgroundImage];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[backgroundImage]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(backgroundImage)]];
但它不起作用。
My Flow-02图像的分辨率为640x1136,所以我认为这会使它适合屏幕,但事实并非如此。有办法吗?
编辑:按照下面rmaddy的回答,我添加了设置图像框架的线条:
backgroundImage.frame = self.view.bounds;
它确实在iPhone 5模拟器上正确设置了我的图像,但在我的iPhone 4s上它仍然是侧面伸展的。
Anindya Sengupta建议的autoresizingMask
方法,V
和H
的设置都没有任何效果。
答案 0 :(得分:2)
另一种选择是这样的:
UIImageView *backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Flow-02"]];
backgroundImage.contentMode = UIViewContentModeScaleToFill;
backgroundImage.frame = self.view.bounds;
backgroundImage.autoResizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:backgroundImage];
[self.view sendSubviewToBack:backgroundImage];
请记住,任何一种方法只是在根据需要进行缩放时图像看起来很好。
答案 1 :(得分:1)
问题在于您正在设置的可视格式。
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[backgroundImage]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(backgroundImage)]];
上面的代码将backgroundImage固定到容器的左侧和右侧。但iPhone并没有变胖,对吗?所以,让我们另外做这个
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[backgroundImage]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(backgroundImage)]];
我刚刚添加了 V:,它会告诉编译器垂直考虑它。对于水平,它将是 H: 如果你没有提及任何东西,默认情况下它是"水平"但提及它总是让代码更容易理解是一个好习惯。