适用于 iPhone 和 iPad 的单笔尖

Posted

技术标签:

【中文标题】适用于 iPhone 和 iPad 的单笔尖【英文标题】:Single NIB for iPhone and iPad 【发布时间】:2013-12-19 06:27:07 【问题描述】:

我已经在这里和 Google 看到了类似的问题,但没有人回答我的实际问题。我想要一个适用于 iPhone 和 iPad 的 NIB。 NIB 本身应该只有一个空视图。应该进入视图的所有内容都以编程方式完成。我检查设备是否为 iPhone/iPad,然后计算并设置布局。多做一点工作,但对于所需的任务,这对我来说是最好的解决方案。

但是当通过“新文件... -> 用户界面 -> 视图”添加新视图时,系统会要求我提供设备系列。选择当然是 iPhone 或 iPad。但我希望视图在两种设备上都能正常工作,有点通用。

我尝试了 iPhone 视图,它实际上适用于 iPhone 和 iPad 两种设备。所以似乎一切都很好。我的问题更笼统,询问是否可以为 iPad 重新使用 iPhone 视图。我要换一种方式吗?有更好的解决方案吗?

请理解,我真的想使用单一视图并以编程方式工作,因此请忽略为每个设备使用单独视图并使用 IB 的解决方案!!!

谢谢

【问题讨论】:

如果您以编程方式创建视图而不是通过编程方式创建视图本身,不是吗? 不能同时使用一个笔尖,如果你想使用通用编码,那么你可以使用我们 -(void)loadView;方法。 【参考方案1】:

如果您以编程方式创建所有内容,则根本不需要笔尖来创建空视图。

你的 UIViewController 子类应该是这样的

@implementation MyViewController
-(void)loadView

    //Do not call [super loadView] in your implementation. 
    //The super implementation loads the nib based on the nibName and nibBundle properties. 
    UIView * view = [[UIView alloc] init];
    //Add subviews, etc

    //You must assign a UIView object to the view property before loadView completes
    self.view = view;

@end

您可以使用以下任何格式实例化视图控制器:

MyViewController * controller = [[MyViewController alloc] initWithNibName:nil bundle:nil];
MyViewController * controller = [[MyViewController alloc] init];
MyViewController * controller = [MyViewController new];

【讨论】:

【参考方案2】:

首先你可以用 AutoResize 来做这件事 > LINK

如果它对您来说变得复杂,那么您可以使用以下函数并以编程方式自己完成。

-(int)setScreenOf


    int size=0;
    if((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad))
    
        //ipad 
         size=3;

    
    else
    

        CGRect screenBounds = [[UIScreen mainScreen] bounds];
        if (screenBounds.size.height ==568)
        
             size=2;
            // code for 4-inch screen           
        
        else
        
            size=1;
            // code for 3.5-inch screen           
          
    
    return  size;    

或者,如果您想要执行特定于设备版本的代码,请尝试此操作。

-(NSString *)deviceVersion

    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *answer = (char*)malloc(size);
    sysctlbyname("hw.machine", answer, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];
    free(answer);
    NSLog(@"Platform: %@", platform);
    return platform;

【讨论】:

以上是关于适用于 iPhone 和 iPad 的单笔尖的主要内容,如果未能解决你的问题,请参考以下文章

从 iphone 过渡到 ipad 笔尖

iOS - 无需使用笔尖即可支持 iPad 和 iPhone

iphone 应用程序错误地包括 ipad 笔尖

导航推送视图控制器不起作用

iTunes Connect 认为我的应用程序适用于 iPad 和 iPhone,而实际上它只适用于 iPad

screenShot代码不适用于ipad,适用于iphone