【问题标题】:Share Extension Status bar style共享扩展状态栏样式
【发布时间】:2014-09-17 17:14:24
【问题描述】:

创建全屏分享扩展时,有没有办法控制状态栏?

我试过了:

  • 基于视图控制器的状态栏 + PreferredStatusBarStyle
  • 状态栏样式
  • 状态栏最初是隐藏的

状态栏似乎没有什么影响,它只是继承自打开共享扩展的视图。是否有解决方法,或者它是按设计必须如何工作的?

【问题讨论】:

    标签: ios objective-c ios8


    【解决方案1】:

    目前无法更改扩展视图 (http://openradar.appspot.com/radar?id=6397505050771456) 的状态栏样式。似乎扩展的状态栏使用与调用扩展的应用相同的样式。

    【讨论】:

      【解决方案2】:

      如果您在父视图控制器上调配preferredStatusBarStyle 方法,您实际上可以更改它。由于您可以在不使用任何非公共 API 的情况下执行此操作,因此 * 应该 * 是应用商店安全的。

      static UIStatusBarStyle statusBarStyle;
      
      static UIStatusBarStyle preferredStatusBarStyle(id self, SEL _cmd)
      {
        return statusBarStyle;
      }
      
      void setPreferredStatusBarStyleOnRootVC(UIStatusBarStyle style, UIViewController *vc)
      {
        statusBarStyle = style;
        static BOOL swizzeld = NO;
        if(swizzeld)
        {
          [vc setNeedsStatusBarAppearanceUpdate];
          return;
        }
      
        swizzeld = YES;
      
        UIViewController *parent;
        while((parent = vc.parentViewController))
          vc = parent;
      
        class_addMethod(vc.class, @selector(preferredStatusBarStyle), (IMP)&preferredStatusBarStyle, "v@:");
      }
      

      【讨论】:

      • 确实调用了 swizzled 方法,但它似乎对状态栏的外观没有影响。
      • Swizzling 公共方法在技术上不使用私有 API。
      猜你喜欢
      • 2019-03-25
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 2016-01-15
      • 1970-01-01
      相关资源
      最近更新 更多