故事板,Interface Builder未加载568h图像

时间:2012-11-01 08:19:21

标签: ios ios6 autolayout

我有一个名为heart.png的全屏图像加载到一个320x480的UIImageView中。我创建了一个640x960版本并命名为heart@2x.png。我还创建了一个640x1136版本并命名为heart-568h@2x.png。

我在故事板中构建了一个3.5英寸视图,其中UIImageView为320x480。我假设使用4英寸屏幕设备将自动加载heart-568h@2x.png,但似乎并非如此。我是否必须为3.5英寸和4英寸屏幕创建2个故事板?

修改

到目前为止,一切都在IB中完成,没有使用任何代码。这是我刚刚设置的示例项目: enter image description here

3 个答案:

答案 0 :(得分:3)

你是对的。设备不会以区分常规和视网膜(@ 2x)的方式自动加载568图像(启动图像除外)。您必须以编程方式检查或使用单独的故事板/ NIB。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        if(screenSize.height == 568) {
           // ...
        }
}

答案 1 :(得分:2)

我构建了我自己的Custom ImageView类:

//  UICustomImageView.h
@interface UICustomImageView : UIImageView
@property (nonatomic) NSString *filename568;
@end

//  UICustomImageView.m
#import "UICustomImageView.h"

@implementation UICustomImageView

- (void)awakeFromNib {
    [super awakeFromNib];

    [self checkFor568];
}

-(void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    [self checkFor568];
}

-(void)checkFor568 {
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        if(screenSize.height == 568) {
            if (self.filename568 != nil)
                self.image = [UIImage imageNamed:self.filename568];
        }
    }
}

@end

在Interface Builder中使用它。 (仍然将图像命名为Background-568h@2x.png进行缩放):

Interface Builder Custom Attributes

答案 2 :(得分:1)

通过堆栈溢出搜索,我了解到图像不会自动加载名称中包含-568h的图像。