UINavigationControllerは左端からのスワイプで前の画面に戻るが、NavigationBar非表示だと戻らなくなる。画面を覆っているViewがTouchイベントを吸収してしまうからのようです。
その場合は、そのViewにUIScreenEdgePanGestureRecognizerをセットして、自分で前の画面に戻してやればいい。
- UIViewControllerにUIScreenEdgePanGestureRecognizerをドラッグ&ドロップで追加。
- ViewからControl+ドラッグでUIScreenEdgePanGestureRecognizerをコネクト。
- gestureRecognizersに追加する。
- UIScreenEdgePanGestureRecognizerのプロパティーでLeftをチェック。
- ViewのプロパティーでUser Interaction Enabledをチェック。
ソースコードの例
最低限の追加はUIScreenEdgePanGestureRecognizerのアクションを受けとるメソッド。
前の画面に戻るので、UIViewControllerに実装するのがよいでしょう。
- (IBAction)handleLeftEdgeGesture:(id)gesture
{
[self.navigationController popViewControllerAnimated:YES];
}
これをIBでUIScreenEdgePanGestureRecognizerのアクションにセットする。
delegateメソッドは必須ではないが、必要な場合は<UIGestureRecognizerDelegate>をヘッダに追加し(これもなくても動いてしまうが)、適宜delegateメソッドを実装。
ステイタスバーを隠す場合は、UIViewControllerに次のメソッドを追加。
- (BOOL)prefersStatusBarHidden
{
return YES;
}
NavigationBarを隠すにはUIViewControllerのviewDidLoadなどに次のメソッドを追加。
[self.navigationController setNavigationBarHidden:YES];
これを行ったあとは前の画面に戻ったときもNavigationBarが隠れたままになるので、そちらでsetNavigationBarHidden:NOに戻す。
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}