ナビゲーションバーの問題
3539 ワード
ナビゲーションバーの技術参考記事:http://tech.glowing.com/cn/change-uinavigationbar-backgroundcolor-dynamically/
ナビゲーションバーの問題
ナビゲーションバーが乱れるhttp://www.jianshu.com/p/e4448c24d900
1、ナビゲーションバーの背景色や背景画像を設定すると、ナビゲーションバーのデフォルトの透明度の問題で元の効果色とは異なります。透明度translucentを設定するとnoです。いくつかの第三者の配置は影響を受ける(一般的には下に移動する64)。2、1級のインターフェースナビゲーションバーは隠して、2級のインターフェースは表示します。ポップが戻ったらナビゲーションバーが消えます。解決策一次インターフェースにおいて、
タブバーTabBar
TabBarがNavを入れ子にした時、Pushを行う時はTabBarの問題を隠します。隠し方:self.hidesBottom BarWhenPused=YES;
ナビゲーションバーの問題
ナビゲーションバーが乱れるhttp://www.jianshu.com/p/e4448c24d900
1、ナビゲーションバーの背景色や背景画像を設定すると、ナビゲーションバーのデフォルトの透明度の問題で元の効果色とは異なります。透明度translucentを設定するとnoです。いくつかの第三者の配置は影響を受ける(一般的には下に移動する64)。2、1級のインターフェースナビゲーションバーは隠して、2級のインターフェースは表示します。ポップが戻ったらナビゲーションバーが消えます。解決策一次インターフェースにおいて、
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
-(void)viewWillDisappear:(BOOL)animated
{
self.navigationController.navigationBarHidden = NO;
[super viewWillDisappear:animated];
}
3、ナビゲーションバーの下のラインを削除します。#define iOS10 ([[UIDevice currentDevice].systemVersion intValue]>=10?YES:NO)
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController.navigationBar.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
if (iOS10) {
//iOS10, _UIBarBackground
if ([view isKindOfClass:NSClassFromString(@"_UIBarBackground")]) {
[view.subviews firstObject].hidden = YES;
}
}else{
//iOS10 _UINavigationBarBackground
if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) { [view.subviews firstObject].hidden = YES;
}
}
}];
}
縮小版:- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.navigationController.navigationBar.subviews[0].subviews[0].hidden = YES;
}
4、ナビゲーションバーの戻りボタン機能はbaseView Controllerに置くことができます。iOS 7の後、システムは横滑りジェスチャーを提供しました。つまり、スクリーンの左側の端から滑り始めたら、ナビゲーションコントローラスタックの前のviewControllerに戻ります。でも、もしUITNavigationView Controllerをカスタマイズしたり、リターンボタンをカスタマイズしたら、システムが持っている横滑りのリターン機能は無効になります。次のように操作できます。self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
正方二:右スライドリターン機能は、システムの画面の端を除いてスライドで戻すことができます。#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
id target = self.navigationController.interactivePopGestureRecognizer.delegate;
// handleNavigationTransition: API, ,
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
panGesture.delegate = self; // ,
[self.view addGestureRecognizer:panGesture];
//
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
// , ,
// :
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// , ,
if(self.navigationController.childViewControllers.count == 1)
{
return NO;
}
return YES;
}
@end
しかし、この方法はプライベートAPIに関連しています。http://www.jianshu.com/p/737924684695 タブバーTabBar
TabBarがNavを入れ子にした時、Pushを行う時はTabBarの問題を隠します。隠し方:self.hidesBottom BarWhenPused=YES;
viewWillAppear :
if (self.navigationController.viewControllers.count > 1) {
self.tabBarController.tabBar.hidden = YES;
}else {
self.tabBarController.tabBar.hidden = NO;
}