Ios 共享扩展状态栏样式

Ios 共享扩展状态栏样式,ios,objective-c,ios8,Ios,Objective C,Ios8,创建全屏共享扩展时,是否有方法控制状态栏 我试过: 基于视图控制器的状态栏+preferredStatusBarStyle 状态栏样式 状态栏最初是隐藏的 似乎没有什么会影响状态栏,它只是从打开共享扩展的视图继承的。是否有一种解决方法,或者根据设计它必须如何工作?目前无法更改扩展视图()的状态栏样式。扩展的状态栏似乎使用了与调用扩展的应用程序相同的样式。如果在父视图控制器上滑动preferredStatusBarStyle方法,实际上可以更改它。因为你不需要使用任何非公共API就可以做到这一

创建全屏共享扩展时,是否有方法控制状态栏

我试过:

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

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

目前无法更改扩展视图()的状态栏样式。扩展的状态栏似乎使用了与调用扩展的应用程序相同的样式。

如果在父视图控制器上滑动
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方法确实会被调用,但它似乎对状态栏的外观没有影响。swizzled公共方法在技术上不使用私有API。