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

时间:2012-04-05 13:15:32

标签: objective-c ios xcode interface-builder universal

道歉,如果这是一个愚蠢的问题,但我已经做了一些谷歌搜索和搜索,并没有找到任何人问这个确切的问题。

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

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

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

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

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

XIB是独立文件的主要原因是因为Apple认为应该分别为iPhone / iPod touch和iPad设计的UI。这与他们的iOS App Programming Guide相呼应,其中包含以下内容:

  

对于视图,主要修改是重新设计视图布局以支持更大的屏幕。简单地缩放现有视图可能有效,但通常不会产生最佳结果。您的新界面应该利用可用空间并在适当的情况下利用新的界面元素。这样做更有可能导致用户感觉更自然的界面 - 而不仅仅是更大屏幕上的iPhone应用程序。

虽然为一个有效的UI维护两个XIB可能需要一些时间,但我觉得它比使用一个XIB然后必须连接大部分UI元素以便在XIB上以编程方式移动它们更直接负载。毕竟,至少有两个XIB,你可以看到每个用户界面的样子,然后轻松地进行视觉变化。

顺便说一句,不要忘记iOS 5的故事板(read about them here),这使得管理视图/视图控制器层次结构变得更加简单。

答案 2 :(得分:1)

尝试命名

MyCell.xibMyCell ~ ipad.xib

然后:

[self.tableView registerNib: @"MyCell" forCellReuseIdentifier: @"MyUniqueIdentifier"];

答案 3 :(得分:0)

如果您使用IB,则需要为iPhone和iPad创建2个单独的xib文件。您需要单独的iPad xib才能使您的应用符合Apple iPad UI指南。