分享扩展状态栏样式

8
创建全屏共享扩展时,有没有一种方法可以控制状态栏?
我尝试了以下方法:
- 视图控制器的状态栏 + preferredStatusBarStyle - 状态栏样式 - 状态栏最初被隐藏
似乎没有任何方法可以影响状态栏,它只是从打开共享扩展的视图继承而来。是否存在解决方法或者这就是它必须工作的设计?
2个回答

7

0

如果您交换父视图控制器上的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@:");
}

1
交换方法确实被调用了,但似乎对状态栏的外观没有影响。 - Ziconic
交换公共方法在技术上并不使用私有API。 - AriX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接