共享扩展状态栏样式

时间:2014-09-17 17:14:25

标签: ios objective-c ios8

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

我试过了:

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

似乎没有什么影响状态栏,它只是从打开共享扩展的视图继承而来。有解决方法还是设计如何运作?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

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

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@:");
}