【问题标题】:iPhone 5 device modifier for dynamic xib loading用于动态 xib 加载的 iPhone 5 设备修饰符
【发布时间】:2012-10-06 07:00:31
【问题描述】:

我正在开发一个通用 iOS 应用程序,并希望为 iPhone 5 使用不同的 xib 文件。它当前的工作方式是自动选择具有正确设备修饰符的文件(如此处指定:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/Introduction/Introduction.html#//apple_ref/doc/uid/10000051i-CH1-SW2)。但是没有提到如何处理 iPhone 5。我很惊讶,因为我的印象是他们更喜欢开发人员在 5 上创建不同/独特的体验,而不仅仅是自动缩放......

有人知道一个有效的修饰符吗? (eg myxib~iphone5.xib) 比自己处理设备检测和切换要方便。

干杯!

【问题讨论】:

  • 如果您在 Xcode 中创建一个 iPhone 5 启动图像编辑目标,它将创建一个单独的 Default.png 变体,带有专门针对高 iPhone 的后缀/修饰符。我不知道 XIB 或 Storyboard 加载是否尊重这一点。
  • 是的,尝试使用 ~568h 就像它使用的那样,但没有运气:(

标签: iphone ios ipad iphone-5 universal


【解决方案1】:

很遗憾,没有命名约定,但有办法。这是我正在使用的:

我有一个名为 GlobalConstants 的全局 .h 文件,我将所有 #define 宏都放入其中。我有这个:

static BOOL is4InchRetina()
{
    if ((![UIApplication sharedApplication].statusBarHidden && (int)[[UIScreen mainScreen] applicationFrame].size.height == 548) || ([UIApplication sharedApplication].statusBarHidden && (int)[[UIScreen mainScreen] applicationFrame].size.height == 568))
        return YES;

    return NO;
}

然后在我的任何视图控制器类中 - 我像这样覆盖 init 方法:

#import GlobalConstants.h

-(id) init {

if(is4InchRetina()) self = [super initWithNibName:@"myNibName5" bundle:[NSBundle mainBundle]];
else self = [super initWithNibName:@"myNibName" bundle:[NSBundle mainBundle]];

return self
}

【讨论】:

  • 谢谢你,虽然他们没有为我们做这件事很蹩脚。我已经解决了与此类似的问题 - 一种全局可访问的方法,当给一个 XIB 名称的 NSString 时,它返回一个带有手动添加的适当修饰符的新方法。所以我可以继续为自己的目的使用 ~ipad ~iphone5 方案
  • @KieranHarper 我听到了。谢谢
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2013-03-24
相关资源
最近更新 更多