3 个不同的故事板,用于不同的设备编程和 3 个不同的 iAd 版本

Posted

技术标签:

【中文标题】3 个不同的故事板,用于不同的设备编程和 3 个不同的 iAd 版本【英文标题】:3 different storyboards for different devices programing and 3 different iAd versions 【发布时间】:2014-10-01 19:47:25 【问题描述】:

您好,我的应用程序使用 3.5 英寸屏幕时遇到问题,所以我想为 iPhone 3.5 版本创建另一个故事板文件,尽管我已经有一个可以工作的 iPad 和 iPhone 4 英寸版本。我的问题是每个设备是否可以有 3 个故事板?1 用于 iPhone 4 英寸主用于 3.5 英寸 iPhone 和 iPad,以及如何识别 iAd 高度以及它是否适用于 2 个版本的 iPad 和 iPhone,但无法弄清楚 3这是 iAd 的代码

- (AppDelegate *) appdelegate 
    return (AppDelegate *)[[UIApplication sharedApplication] delegate];


-(void) viewWillAppear:(BOOL)animated
    _UIiAD = [[self appdelegate] UIiAD];
    _UIiAD.delegate = self;
    //checkts whether you are running on iPad,or iphone to get the banner to correct possition
        if ( IDIOM == IPAD ) 
            [_UIiAD setFrame:CGRectMake(0,960,320,50)];
         else 
            [_UIiAD setFrame:CGRectMake(0,521,320,50)];

    
    [self.view addSubview:_UIiAD];


-(void) viewWillDisappear:(BOOL)animated
    _UIiAD.delegate = nil;
    _UIiAD=nil;
    [_UIiAD removeFromSuperview];


-(void)bannerViewDidLoadAd:(ADBannerView *)banner
    NSLog(@"ads loaded");
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [_UIiAD setAlpha:1];
    [UIView commitAnimations];


-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
    NSLog(@"ads not loaded");
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [_UIiAD setAlpha:0];
    [UIView commitAnimations];

也需要为 3.5 做它,但无法弄清楚 至于关于 3 个不同故事板的连接,我得到了这个字符串 在我的 plist 文件中

主故事板文件基本名称 主故事板文件基本名称(iPad) 我应该简单地创建新字符串吗 主情节提要文件基本名称(iPhone) 并连接我创建的故事板文件? 或者任何人都可以告诉我一个更简单的解决方案,可能在 Xcode 6 中有约束,尽管我仍然试图弄清楚它是如何工作的 谢谢!

【问题讨论】:

【参考方案1】:

您无需为 3.5 英寸设备创建单独的情节提要。只需在您的应用程序中全局定义以下宏,您就可以检查各种设备。

`#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

定义 IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

定义 IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)

定义 IS_IPHONE_4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0f)

定义 IS_RETINA ([[UIScreen mainScreen] scale] == 2.0f)

定义 IDZTrace() NSLog(@"%s", PRETTY_FUNCTION)

` 只需将 IS_IPHONE_4 检查 3.5 英寸设备并应用您的相关逻辑。您还可以使用自动布局和约束。如果您不清楚约束和自动布局概念,请关注http://www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1。

【讨论】:

以上是关于3 个不同的故事板,用于不同的设备编程和 3 个不同的 iAd 版本的主要内容,如果未能解决你的问题,请参考以下文章

故事板约束(Xcode)

使用 2 个不同的故事板,一个用于 LTR,一个用于 RTL(非自动布局)

iOS - 自动布局与不同屏幕尺寸的不同故事板

2 个用于纵向和横向的故事板

Apple Watch 预构建操作以更改故事板 customModule 引用

如何在 XCode 中预览故事板的不同视图控制器