故事板,接口生成器无法加载568h图像。

3
我有一个全屏图像 heart.png 被加载到了一个尺寸为 320x480 的 UIImageView 中。我创建了一个 640x960 的版本并命名为 heart@2x.png,还创建了一个 640x1136 的版本并命名为 heart-568h@2x.png。
我在故事板中建立了一个尺寸为 3.5 英寸的视图和一个尺寸为 320x480 的 UIImageView。我假设使用 4 英寸的屏幕会自动加载 heart-568h@2x.png,但似乎并非如此。我需要为 3.5 英寸和 4 英寸的屏幕分别创建 2 个故事板吗?
编辑:
到目前为止,一切都是在 IB 中完成的,没有使用代码。这里是我刚设置的一个示例项目: enter image description here

所以为了澄清,您有一个使用自动布局调整大小的图像视图,您只需使用以下代码在其上设置图像(可能是):[UIImage imageNamed:@"heart"]; - larsacus
3个回答

3
你说得对。设备不会自动加载568图片(除了启动图像之外),方式是它在区分常规和Retina (@2x)时。你必须通过编程进行检查,或者使用单独的storyboard/NIB。
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        if(screenSize.height == 568) {
           // ...
        }
}

希望不算太离题,但我有很多视图和几个专门为4英寸屏幕设计的资源。设计两个Storyboard,一个用于3.5英寸,另一个用于4英寸,这样做是否有意义? - ninjaneer
1
这是我要前进的方向... 但我不愿意说这是否是最佳实践。 - J Shapiro

2
我建立了自己的自定义 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自定义属性


这是通过IB最简单和无痛的方式完成此操作!谢谢! - Thiago Pires

1

通过搜索Stack Overflow,我了解到带有名称中的-568h的图像不会自动加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接