【问题标题】:iAd banner rotates my view to landscapeiAd 横幅将我的视图旋转到横向
【发布时间】:2013-03-23 15:25:40
【问题描述】:

我的应用程序中的视图仅是纵向的 - 我的视图控制器和根视图控制器都确保它们仅使用 shouldAutorotateToInterfaceOrientation:supportedInterfaceOrientations 旋转到纵向,以便同时支持 iOS 5 和 iOS 6。我'已将 iAd 横幅添加到视图中,并且它正确显示在屏幕顶部。当我点击它以在 iPad 上查看测试广告时,测试广告以横向显示,这是我所期望的 - 我知道 iAd 可能是任何方向的。但是当我关闭广告时,我的视图是横向的,带有横幅的视图和根视图控制器的视图。当我旋转设备时,它们会旋转回纵向并停留在那里。

如何防止 iAd 旋转我的视图,或在 iAd 关闭时让我的视图恢复为纵向?

编辑:我也尝试过使用 application:supportedInterfaceOrientationsForWindow: 并将 shouldAutoRotate 设置为 true - 都不能解决问题。

再次编辑:我仍然没有运气。 Here's a project 具有相当少的视图控制器实现,显示了我遇到的错误 - 感谢任何帮助!

【问题讨论】:

  • 为了清楚起见,有几件事......(1)我认为你试图表明你试图同时覆盖 iOS 5 和 iOS 6,但以防万一......来自iOS SDK 发行说明,在 iOS 6 中,shouldAutoRotateToInterfaceOrientation: 已弃用。 (2) 您可以通过实现 application:supportedInterfaceOrientationsForWindow: ... 来跳过这些实现,请参阅文档以了解如何覆盖这项工作; (3) 如果您不这样做 (2),您可能还必须实现 shouldAutorotate 以允许在退出横向 iAd 时旋转回纵向。
  • 谢谢,尝试了一些新东西并编辑了我的问题以澄清。
  • @Luke,您是否尝试过设置 iAd 的方向以确定方向(ios5)并在 ShouldAutorotate 方法中设置调整大小蒙版(iOS 6)?您可以通过在其中添加两个 iOS 的 if 语句来做到这一点,看看它是否适合您。我之前尝试过这种方法,它还可以保持 iad 的方向,此外,在横幅完成方法中,您可以在添加午餐或完成后将视图的方向设置为您想要的方向。虽然这可能会有所帮助。:)
  • @CodeMonkey 我不知道如何设置 iAd 的方向或设置它的大小调整掩码 - 你介意给我看一些代码吗?

标签: iphone ipad iad uiinterfaceorientation adbannerview


【解决方案1】:

我会尝试两件事。首先在应用程序的目标配置(摘要)中设置“支持的界面方向”。

然后对于界面构建器中的每个视图,在模拟指标下(属性面板上的 4 个选项卡)确保选择纵向。如果您选择了“推断”,那么它将在显示自身时采用之前的屏幕方向。

【讨论】:

  • 这两个都设置为纵向。
【解决方案2】:

解决了。我的辅助视图控制器必须是主视图控制器的子视图控制器。

【讨论】:

  • 那么你必须做什么?我现在也有同样的问题。
  • 我也想澄清一下哈哈
  • 解释一下!我也遇到了同样的问题,我一辈子都无法解决它!
  • 好点,对此有一些反馈会很好,关于这个问题的信息很少,但苹果论坛上的帖子也没有被注意到:forums.developer.apple.com/thread/25301
【解决方案3】:

我以为我会推送更新,因为我终于修复了这个问题,这适用于 iOS 8 和 9,首先注册应用程序以跟踪设备方向。

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

    return YES;
}

现在,当广告完成显示时,您可以检查设备方向并将其强制恢复为纵向。

-(void)bannerViewActionDidFinish:(ADBannerView *)banner{

            UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

            if (UIDeviceOrientationIsLandscape(orientation)) {

                NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
                [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
            }

            //NSLog(@"iAD actions finished");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多