ios - 如何为 iPhone 4 英寸和 iPhone 3.5 英寸加载单独的 NIB 文件?

标签 ios layout ios6 nib

如何为我的 iPhone 应用程序加载单独的 nib 文件,以检查用户是否拥有 iPhone 5/iPod Touch 4 英寸屏幕和 3.5 英寸屏幕?

这是在init方法中完成的吗?

详情
- 我没有为整个应用程序使用 Storyboard。在某一时刻,我确实使用了 Storyboard并从其中一个 View Controller 中调用它。 (有没有办法区分 Storyboard?)

  • 我正在寻找一个在每个单独的 viewController 中初始化的解决方案......而不是我会放在只运行一次的 appdelegate 中的东西。
  • 对我来说,自动布局在很多情况下都不起作用。这些设计非常图形化,太多的空白使事情看起来很糟糕。
  • 最佳答案

    我找到了办法!

  • 我制作了单独的 Nib 文件,一个用于 3.5"/iPhone 非视网膜,一个用于 iPhone5
  • 我使用宏来检查当前手机是否为 iPhone 5 格式。 (1)
  • 对于普通的 initWithNibName:bundle: 我写了一个异常,以便他们不使用普通的初始化程序。我将其命名为@“错误的初始化程序”
  • 我为 viewController 创建了一个新的指定初始化程序,将其命名为 initForFormat:
  • 我使用我的宏检查设备是否是 iPhone 5。如果是 iphone5,那么我使用 nib 名称 ViewControllerIphone5
  • 进行初始化


    我从 https://stackoverflow.com/a/13068238/1492368 得到这个宏来自希望之光
     #define HEIGHT_IPHONE_5 568
    #define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5 )
    

    所以在新指定的初始化器initForLayout中:我写
    if(IS_IPHONE_5)
        {
            self=[super initWithNibName:@"DetailViewControlleriPhone5" bundle:nil];
        }
        else
        {
            self=[super initWithNibName:@"DetailViewController" bundle:nil];
        }
    

    旧初始化程序

    我从大 Nerd 牧场学到了这一点:
    使用标准初始化程序时抛出异常
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
    
        @throw [NSException exceptionWithName:@"Wrong initializer"
                                       reason:@"Use initForLayout:"
                                     userInfo:nil];
        return nil;
    }
    

    从另一个 ViewController/AppDelegate 调用 View Controller
    因此,当我从另一个 View Controller 或 appdelegate 调用此 DetailViewController 时,我会写:
    DetailViewController *detailViewController = [[DetailViewController alloc] initForLayout];
    

    关于ios - 如何为 iPhone 4 英寸和 iPhone 3.5 英寸加载单独的 NIB 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144202/

    相关文章:

    ios - MKMapView 与零高度约束斗争 - map View 的 edgeInsets?

    ios - coreData 实体中的私有(private)属性

    swift - 如何在 UITabelViewCell 类中访问正确的单元格宽度?

    java - Android 无法让 TextViews 用 LinearLayout 显示

    iphone - ios 6 Storyboard和基于方向的自定义布局

    ios - 专门为 iOS 6 开发安全吗?

    ios - 如何设置 UICollectionViewDelegateFlowLayout?

    ios - NSURLConnection 使异步调用 aSync 并处理自签名证书

    twitter-bootstrap - Twitter Bootstrap 3 - 最大高度,自定义布局

    iphone - 如何从ios应用程序连接到本地WIFI并传输信息/照片