在 UIActivityViewController 中设置扩展的 StatusBar 颜色

2024-01-01

给出以下情况:

iOS 8+ 应用程序(主要是 Swift)。状态栏设置为View controller-based status bar appearance。在应用程序中,多个 UIActivityViewController 用于显示共享选项。

问题:某些共享活动的状态栏颜色错误。这些是使用时显示的设备安装的扩展UIActivityViewController。这里:分享活动,例如WhatsApp、Tumblr、Skype。

我想要实现什么:此应用程序的默认 StatusBarStyle 是 .LightContent 以适合本地 UIAppearance(对基本 NavigationController 类进行着色)。远程全屏控制器应获取 .Default StatusBarStyle,而模态对话框应保留当前样式 (.LightContent)。

我测试了每一种可能的组合,但现在我陷入了困境。

主视图控制器中的代码(选项卡式应用程序):

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
    }

    override func prefersStatusBarHidden() -> Bool {
        return false
    }

    override func childViewControllerForStatusBarStyle() -> UIViewController? {
        guard let presentedViewController = presentedViewController else {
            return nil
        }

        switch presentedViewController {
        case is SLComposeViewController: // Social Sharing, e.g. Facebook, WhatsApp, Reminders etc.
            // let rawPresentationStyle = presentedViewController.modalPresentationStyle.rawValue
            // rawPresentationStyle == 17 (0x11) is undocumented Raw Value for SLComposeViewController dialogs
            return presentedViewController
        case is UIActivityViewController:
            // i.e. "More" Activity, UIActivityViewController internally uses presentViewController again to show "More" View
            // presentedViewController.modalPresentationStyle != presentedViewController.presentedViewController.modalPresentationStyle (e.g. .Popover to .OverCurrentContext)
            let presentedStyle = presentedViewController.presentedViewController?.modalPresentationStyle // UIActivity > presented
            if presentedStyle == .OverFullScreen {
                return presentedViewController
            }
        default:
            break
        }

        return nil // use local preferredStatusBarStyle
    }

该代码运行良好。验证每一步的开关都是正确的。但是,SLComposeViewController 启动 XPC 远程视图:SLRemoteComposeViewController和...一起_UIRemoteView.

两者都没有设置.modalPresentationStyle,所以没有办法获取这个值来决定是否将控制权交给presentedViewController。

基本上来说,无论 XPC 远程视图是模态的(在当前上下文上变暗)还是全屏,当将控制权返回到 self.presentedViewController 时,StatusBar 都会变成 .Default。

我能够追踪到 XPC。 SLComposeViewController 的 modalPresentationStyle 是未记录的样式 17 (0x11)。

有人知道如何与 UIActivityViewController 一起为社交共享设置正确的 StatusBar 吗?

编辑: 我也尝试设置View controller-based status bar appearance到没有。通过这个设置preferredStatusBarStyle and childViewControllerForStatusBarStyle:根据文档,根本没有被调用。但无论如何,无论状态栏是 .LightContent 还是 .Default,这都行不通。要么是远程模态活动错误,要么是远程全屏活动错误。当然,远程 XPC 视图不受开发人员的控制。据我所知,扩展开发人员(Facebook、WhatsApp 等)反过来也有同样的问题:他们也无法控制 StatusBar。

我缺少任何雷达吗?

Edit2:更改了标题,我也知道 modalPresentationCapturesStatusBarAppearance。

我发现 Tumblr 工程团队在 2014 年的某个时候发表了一篇有趣的博客文章,他们在创建共享扩展时也遇到了无法修复的 StatusBar 问题。看http://engineering.tumblr.com/post/97658880154/what-we-learned-building-the-tumblr-ios-share http://engineering.tumblr.com/post/97658880154/what-we-learned-building-the-tumblr-ios-share- 指向:http://openradar.appspot.com/radar?id=6397505050771456 http://openradar.appspot.com/radar?id=6397505050771456

解决方法

到目前为止还没有。 Info.plist 键和视图控制器方法都不是 成功了,我们甚至无法获取键盘窗口的句柄 应用程序通常可以使用私有 API 来完成的方式(山姆 吉丁斯几乎要疯了。谢谢萨姆!)。在此希望有一个 在 iOS 8.1 中执行此操作的方法。

我也几乎疯狂地尝试;)


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 UIActivityViewController 中设置扩展的 StatusBar 颜色 的相关文章

  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • Java、Spring、Hibernate找不到org.springframework.orm.hibernate3.LocalSessionFactoryBean

    我正在尝试制作 spring hibernate ant 项目 目前我收到此错误 HTTP Status 500 type Exception report message description The server encountere
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk
  • Ruby 中的 url_encode

    I read 的文档url encode http rdoc info stdlib erb 1 9 3 ERB Util 3Aurl encode 是否有一个表可以准确地告诉我哪个字符被编码为什么 使用url encode ERB s u
  • AWS DynamoDB 写后读一致性 - 理论上它是如何工作的?

    大多数nosql解决方案仅使用最终一致性 并且考虑到DynamoDB将数据复制到三个数据中心 如何保持写后读一致性 解决此类问题的通用方法是什么 我认为这很有趣 因为即使在 MySQL 复制中 数据也是异步复制的 我将详细告诉您 Dynam
  • 张量流中的复杂卷积

    我正在尝试运行一个简单的卷积 但包含复数 r np random random 1 10 10 10 i np random random 1 10 10 10 x tf complex r i conv layer tf layers c
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo
  • CGImage/UIImage 在 UI 线程上延迟加载会导致卡顿

    我的程序显示一个水平滚动表面 从左到右平铺有 UIImageViews 代码在 UI 线程上运行 以确保新可见的 UIImageView 分配有新加载的 UIImage 加载发生在后台线程上 一切工作几乎都很好 除了每个图像变得可见时出现口
  • 使用 AppleScript 运行另一个应用程序而不将其显示在扩展坞上

    使用 AppleScript 您可以创建运行另一个应用程序的脚本 然后将该脚本本身另存为应用程序并将其放置在 Dock 中 问题 不是真正的问题 是 当您单击它时 它仍然会在扩展坞上显示其他应用程序 是否可以阻止其他应用程序在扩展坞中显示
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f
  • 如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

    有谁知道如何使用配置文件 ebextensions 在 AWS Elastic Beanstalk 上安装和启用 PHP IMAP 扩展 我使用的是 64 位 Amazon Linux 2017 03 v2 4 0 运行 PHP 7 0 1
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐