【问题标题】:Compiling against 5.1 SDK forces new UIPopoverController "slide in" presentation of popovers -- how to disable?针对 5.1 SDK 进行编译会强制新的 UIPopoverController“滑入”弹出框演示——如何禁用?
【发布时间】:2012-03-25 15:19:30
【问题描述】:

针对 5.1 SDK(发行版)编译我的 iPad 应用程序会导致 UIPopoverController 使用左侧演示文稿中的新“滑入”显示自己。这完全打破了我的 popover 演示文稿,它依赖于具有“黑色”样式的标题和一定的高度。我尝试将presentsWithGesture 设置为NO,但这似乎只是禁用了滑动手势,并不会停止演示风格。

同样的应用程序,无需重新编译,但在 iOS 5.1 上运行,使用旧的弹出框演示样式。所以我知道 iOS 5.1 仍然支持向后兼容的方法。如何选择激活弹出框的旧演示文稿?

不幸的是,这对我的应用非常重要。

如果做不到这一点,有没有办法在新的弹出框上获得“黑色”样式的标题?


虽然我的应用程序中有一个 UISplitViewController,但它不负责显示弹出框。相反,我使用的是这段代码:

   [self.popoverController presentPopoverFromRect:ipadButtonMenu.frame
                                           inView:self.view
                         permittedArrowDirections:UIPopoverArrowDirectionUp
                                         animated:YES];

这个问题是来自 Apple 开发者论坛 here 的交叉帖子。我希望有人能给出答案。


预计演讲:

iOS 5.1 SDK下编译后的呈现:

【问题讨论】:

  • 我的朋友,这是一些非常出色的 UI 设计!你有没有机会清理你的构建并从头开始重新编译?我会提交一个雷达,因为 twitter 似乎与你面临的同样的问题爆炸了。
  • 是的,清理/重建似乎不会影响它。你在 Twitter 上看到的任何人都在谈论它?
  • 我敢打赌它被宣布是错误的。我刚刚注意到文档仅将属性声明为 @property (nonatomic) BOOL presentWithGesture;我在那里没有看到任何分配...
  • 好吧,文档不一定说presentsWithGesture 应该修改演示样式,只是手势本身。但它是 5.1 中添加的唯一新属性。 UIPopoverController 没有我能看到的任何新内容。

标签: ios ipad uikit uisplitviewcontroller uipopovercontroller


【解决方案1】:

此更改似乎经过深思熟虑。当然,我们会破坏使用滑动的详细视图中的任何内容。太棒了!

要回答您的“带回黑色”问题,如果它只是顶部导航栏颜色的问题,您可以使用外观代理。例如:

[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];

外观代理可以根据需要进行非常具体的设置;它有一个容器模型。上面有一个非常好的 WWDC 视频。

关于使用新编译器恢复到旧行为,坦率地说,我也很想知道。新行为还会破坏主视图中的操作表;以前,当主视图显示在弹出窗口中时,他们会做正确的事情。现在,这是一个断言失败。

【讨论】:

  • setTintColor 可能是最后的手段——谢谢。不幸的是,弹出框的高度 (contentSizeForViewInPopover) 对这个应用程序来说也很重要,他们似乎完全打破了这种行为。
  • 由于恢复到旧的行为似乎是不可能的,我已经辞职自己修复它以看起来更好。您的回答使这成为可能,所以我将其标记为答案。
  • 嗨,你有没有想出一种方法来恢复 iOS 5.1 中的弹出框效果?
【解决方案2】:

好的,我遇到了同样的问题,这可能会有所帮助,它会删除到达屏幕底部的黑色背景....

在显示弹出窗口后调用它...

- (void)removeInnerShadow {
    UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
    for (UIView *windowSubView in window.subviews) {

            if ([NSStringFromClass([windowSubView class]) isEqualToString:@"UIDimmingView"]) {
            for (UIView *dimmingViewSubviews in windowSubView.subviews) {

                for (UIView *popoverSubview in dimmingViewSubviews.subviews) {

                    popoverSubview.layer.shadowOpacity=0;
                    popoverSubview.layer.masksToBounds = NO;

                     if([NSStringFromClass([popoverSubview class]) isEqualToString:@"_UIPopoverSlidingChromeView"])
                     {

                         popoverSubview.layer.shadowOpacity=0;
                         popoverSubview.layer.masksToBounds = NO;

                     }
                }
            }
        }
    }
}

【讨论】:

    【解决方案3】:

    可以恢复! - 使用 MGSplitViewController。它为您提供了与 iOS 控件类似的 API,但具有旧的弹出框和更多控件。

    【讨论】:

      【解决方案4】:

      自 iOS 5.1 起

      来自文档:

      在 iOS 5.1 中,UISplitViewController 类在呈现左视图时采用了滑动呈现样式(以前只在 Mail 中看到)。当通过委托方法提供的现有条形按钮项或通过右视图中的滑动手势启动演示时,使用此样式。无需额外采用 API 即可获得此行为,所有现有 API(包括委托提供的 UIPopoverController 实例的 API)将继续像以前一样工作。

      here -> 的小工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多