使用NSLayoutConstraint以编程方式为iPhone和iPhone 5使用一个背景图像

时间:2014-03-20 14:35:55

标签: ios nslayoutconstraint

我试图通过使用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方法,VH的设置都没有任何效果。

2 个答案:

答案 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: 如果你没有提及任何东西,默认情况下它是"水平"但提及它总是让代码更容易理解是一个好习惯。