我正在尝试为UIImageView
个用户调整后台静态Nib
(来自iPhone5
文件)的大小。不幸的是,以下代码似乎对背景视图的大小没有任何影响。
有谁知道为什么?提前感谢您提供的任何帮助。
ViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
device = appDelegate.deviceType;
NSLog(@"The device platform is: %@", device);
if ([[device substringToIndex:8] caseInsensitiveCompare: @"iPhone 5"] == NSOrderedSame) {
[background sizeThatFits:CGSizeMake(320, 504)];
}
else {
[background sizeThatFits:CGSizeMake(320, 416)];
}
...
//Note: 'background' is declared in `ViewController.h` as, `IBOutlet` `UIImageView` *background, and is linked to the image view in ViewController_iPhone.xib
答案 0 :(得分:4)
一些想法:
正如demosten和shabzco建议的那样,我不会使用设备名称/描述来确定坐标(如果没有别的,那么iPhone 6等等);
如果您要以编程方式设置frame
,我建议根据视图控制器的视图background.frame
设置bounds
属性,而不是硬编码大小图像视图。这样,背景被调整到视图控制器视图的适当大小,不仅与设备无关,而且无论该视图控制器是否在以后被嵌入为另一个容器控制器的子视图控制器等。 (例如,如果您将视图放在导航控制器和标签栏控制器,您自己的自定义容器控制器等中,该怎么办)。另外,不要假设状态栏或其他图形元素的大小。让iOS为您解决所有问题:
background.frame = self.view.bounds;
或者更好的是,如果您已将背景图像视图添加到NIB本身,请设置自动调整遮罩,并且不要以编程方式更改frame
。如果您关闭了autolayout,只需设置图像视图的自动调整属性,如下所示:
如果可以的话,可以在代码中避免显式设备名称引用,并避免硬编码坐标。在代码中使用硬编码的维度只会使您的应用程序更加脆弱,容易受到新设备,iOS新版本,将视图控制器嵌入其他容器控制器等问题的影响,并限制代码的重用机会。
答案 1 :(得分:2)
这是在iPhone 5和之前尺寸的设备之间进行检查的更好方法
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
[background sizeThatFits:CGSizeMake(320, 416)];
}
if(result.height == 568)
{
[background sizeThatFits:CGSizeMake(320, 504)];
}
}
答案 2 :(得分:1)
sizeThatFits
不会改变大小。您应该修改background.frame
。类似的东西:
background.frame = CGRectMake(background.frame.origin.x, background.frame.origin.y, 320, 416);
和
background.frame = CGRectMake(background.frame.origin.x, background.frame.origin.y, 320, 504);
在编辑Nib文件时,还要确保UIImageView在“大小检查器”选项卡中没有灵活的宽度或高度。