根据 iPhone 屏幕大小显示不同的 xib 文件

Posted

技术标签:

【中文标题】根据 iPhone 屏幕大小显示不同的 xib 文件【英文标题】:Display different xib files based on iPhone screen size 【发布时间】:2013-01-10 21:38:09 【问题描述】:

我现在已经制作了一些适用于 iPhone 5 和 iPhone 的应用程序,并且根据 frame.view.height 对所有内容进行编程和调整大小确实变得很麻烦,所以这次我在我的 xib 文件中创建了视图,一个使用 iPhone 5 Retina UIView 和使用常规 UIView 的...现在,如果用户使用 iPhone 4-,我如何显示一个,如果用户使用 iPhone5+,我如何显示另一个...我假设它会完成应用委托中的某处。

我可以通过检查 ViewDidAppear 中的超级视图帧高度来检测用户是否使用 iPhone 5(*它在 ViewDidLoad 中不起作用)

但是我从那里去哪里选择我显示的视图...我有 1 个视图控制器,并且 xib 文件中的两个视图内容都连接到受控的视图。 视图本身没有连接...只有一个带有空白 Xcode 项目附带的默认“*view”,我不知道如何添加第二个。

谢谢!

【问题讨论】:

Can I use two xibs with one viewcontroller - re: porting to iPhone 5 的可能重复项 不确定这是否有帮助,但this 是如何处理多种屏幕尺寸的绝佳答案。可能会改变您的基本设计决策以使用两种不同的视图。 【参考方案1】:

您可以测试[UIScreen mainScreen].bounds.size.height 而不是您的视图,以准确找到屏幕的高度。如果是 480 就是 iPhone 4/4s,如果是 568 就是 iPhone 5 4 英寸屏幕

【讨论】:

那么选择使用哪个视图的最佳方法是什么?我只能说[self.view addSubview:iPhone5View]; 但是我在浪费内存显示两个视图对吗?那么如何摆脱默认视图并在其位置显示 iPhone5 视图呢? 通常您在视图控制器级别使用UIViewController 方法- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 执行此操作。实际上,上面@JesseRusak 评论中的链接有一个很好的代码示例,在视图控制器viewDidLoad 方法中使用[[NSBundle mainBundle] loadNibNamed:【参考方案2】:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    
        // iPhone Classic
    
    if(result.height == 568)
    
        // iPhone 5
    

【讨论】:

以上是关于根据 iPhone 屏幕大小显示不同的 xib 文件的主要内容,如果未能解决你的问题,请参考以下文章

根据设备屏幕从 xib 文件中获取大小参数

将 XIB 文件自动调整为屏幕大小

以编程方式更改不同 iPad 屏幕分辨率上的 .xib 大小

不同屏幕尺寸的IOS不同xib

自动调整 iPhone xib 应用程序到 ipad 的大小

如何为 iPhone 5 显示器加载 xib