status bar的控制和全屏返回手势

摘自 sunnyxx 的文章:一个丝滑的全屏滑动返回手势

status bar

UIApplication 全局的 status bar,牵一发还得动全身,不过 Apple 在 iOS7 之后为 vc 控制自己的 status bar 提供了下面几个方法,终于让这个全局变量变成了局部变量:

1
2
3
- (UIStatusBarStyle)preferredStatusBarStyle NS_AVAILABLE_IOS(7_0);
- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0);
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation NS_AVAILABLE_IOS(7_0);

fullscreen-pop-gesture

一个 UINavigationController 管理了串行的 N 个 UIViewController 栈式的 push 和 pop,而 UINavigationBar 由 UINavigationController 管理,这就导致了 UIViewController 无法控制自己上面的 bar 单独的隐藏或显示。
但是对 UINavigationBar 的控制,依然是全局的,可能 Apple 觉得 App 不应该有这种奇怪的页面结构?

解决这个问题的方法也不难,在滑动返回的后要出现的那个 view controller 中写下面的代码:

1
2
3
4
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}

fullscreen-pop-gesture

Xcode tips

  • Secondary click : Jump to definition
  • Show Relative Items(^1): Callers
    Show Relative Items