3

我正在尝试为用户调整背景静态UIImageView(来自Nib文件)的大小iPhone5。不幸的是,以下代码似乎对背景视图的大小没有任何影响。

有谁知道为什么?提前感谢您提供的任何帮助。

视图控制器.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 
4

3 回答 3

4

一些想法:

  1. 正如 demosten 和 shabzco 建议的那样,我不会使用设备名称/描述来确定坐标(如果没有别的,那么 iPhone 6 等);

  2. 如果您要以frame编程方式设置,我建议background.frame根据视图控制器的视图设置属性,bounds而不是硬编码图像视图的大小。这样,背景会被调整为视图控制器视图的适当大小,不仅与设备无关,而且无论该视图控制器是否在以后作为另一个容器控制器的子视图控制器嵌入,等等。 (例如,如果您将视图放在导航控制器和标签栏控制器、您自己的自定义容器控制器等中会怎样)。此外,不要对状态栏或其他图形元素的大小做出假设。让 iOS 为您解决所有这些问题,只需:

    background.frame = self.view.bounds;
    
  3. 或者更好的是,如果您已将背景图像视图添加到 NIB 本身,请设置自动调整大小的蒙版,并且根本不要以frame编程方式更改。如果您关闭了自动布局,只需像这样设置图像视图的自动调整大小属性:

    自动调整大小

最重要的是,如果可以的话,避免在代码中显式引用设备名称并避免硬编码坐标。在代码中硬编码维度只会使您的应用程序更加脆弱,容易受到新设备、新版本 iOS、将视图控制器嵌入其他容器控制器等问题的影响,并限制代码的重用机会。

于 2013-01-02T02:30:04.467 回答
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)];
    }
}
于 2013-01-02T02:09:50.943 回答
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 在大小检查器选项卡中没有灵活的宽度或高度。

于 2013-01-02T02:19:00.597 回答