mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-20 08:27:32 +08:00
74 lines
2.3 KiB
Markdown
74 lines
2.3 KiB
Markdown
### Interacting with UINavigationController
|
|
|
|
Push a view controller with a flexible header onto UINavigationController and you may find that
|
|
the existing UINavigationBar is undesired. The most obvious example occurs when your flexible header
|
|
has its own navigation bar.
|
|
|
|
If this is the case then we recommend hiding the UINavigationController's `navigationBar` during
|
|
UIViewController appearance events: `viewWillAppear:` or `viewWillDisappear:`. Changing the
|
|
navigation bar's visibility during these events gives the highest likelihood of your navigation bar
|
|
animating in/out in a reasonable manner.
|
|
|
|
> Important: Hiding UINavigationController's navigationBar nullifies UINavigationController's swipe-
|
|
> to-go-back feature. To continue using this feature whilst hiding the navigationBar, read the
|
|
> section on [Enabling Swipe to Go Back With Hidden NavigationBar](#enabling-swipe-to-go-back-with-hidden-navigationbar).
|
|
|
|
<!--<div class="material-code-render" markdown="1">-->
|
|
#### Swift
|
|
```swift
|
|
override func viewWillAppear(animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
|
|
navigationController?.setNavigationBarHidden(true, animated: animated)
|
|
}
|
|
```
|
|
|
|
#### Objective-C
|
|
```objc
|
|
- (void)viewWillAppear:(BOOL)animated {
|
|
[super viewWillAppear:animated];
|
|
|
|
[self.navigationController setNavigationBarHidden:YES animated:animated];
|
|
}
|
|
```
|
|
<!--</div>-->
|
|
|
|
Add the following to view controllers that don't have an app bar:
|
|
|
|
<!--<div class="material-code-render" markdown="1">-->
|
|
#### Swift
|
|
```swift
|
|
override func viewWillAppear(animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
|
|
navigationController?.setNavigationBarHidden(false, animated: animated)
|
|
}
|
|
```
|
|
|
|
#### Objective-C
|
|
```objc
|
|
- (void)viewWillAppear:(BOOL)animated {
|
|
[super viewWillAppear:animated];
|
|
|
|
[self.navigationController setNavigationBarHidden:NO animated:animated];
|
|
}
|
|
```
|
|
<!--</div>-->
|
|
|
|
If all of your view controllers use the App Bar in a given UINavigationController then you can
|
|
simply hide the navigationBar when you create the navigation controller. **Don't forget to do this
|
|
at app restoration time!**
|
|
|
|
<!--<div class="material-code-render" markdown="1">-->
|
|
#### Swift
|
|
```swift
|
|
navigationController.setNavigationBarHidden(false, animated: false)
|
|
```
|
|
|
|
#### Objective-C
|
|
```objc
|
|
UINavigationController *navigationController = ...;
|
|
[navigationController setNavigationBarHidden:NO animated:NO];
|
|
```
|
|
<!--</div>-->
|