在Interface Builder中为通用应用创建单个.xib?(IOS)

Wen*_*idd 7 xcode objective-c interface-builder universal ios

抱歉,如果这是一个愚蠢的问题,但我已经做了一些谷歌搜索和搜索SO,并没有发现任何人问这个确切的问题.

我一直在做iOS开发已有一段时间了,但我对Interface Builder完全不熟悉.我想知道的是:有没有办法只创建一个.xib文件,然后在Universal应用程序中将它用于iPhone和iPad?

我必须单独创建它们似乎很愚蠢; 为什么在我可以在代码中执行一次(对屏幕大小进行微调)时,在Interface Builder中多次放置一些工作?

如果我在这里遗失/误解,请告诉我.就像我说的,我是一个完整的Interface Builder新手:)

编辑:过去我已经向App Store提交了非界面构建器游戏,其中iPhone和iPad版本相同,所以我并不担心每个设备上的游戏外观/感觉都不同.我希望它们看起来完全一样,除了由于纵横比的差异导致的一些轻微的定位变化.

the*_*tka 10

如果您知道结果视图的外观,基于自动调整,您确实只能使用一个.xib.如果视图只是某种可以按需要自动调整的共享组件,则可以派上用场.但是,如果您需要iPad上的视图与iPhone上的视图不同,请使用两个.xib.然后可以根据需要加载适当的一个,例如在实例初始化程序中,如此控制器的-init:

- (id)init
{
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
    {
         self = [super initWithNibName:@"YourNibForPad" bundle:nil];
    }
    else
    {
         self = [super initWithNibName:@"YourNibForPhone" bundle:nil];
    }
    if (self) { /* initialize other ivars */ }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过命名pad和phone xib来重新进行userInterfaceIdiom检查,如下所示.YourNib~ipad yourNib~iphone.然后你可以做超级initWithNibName:@"yourNib",iOS会找出你要加载哪一个.然后你可以做.... - (instancetype)init {self = [super initWIthNibName:@"yourNib"]; if(self)//做东西回归自我; } (2认同)