ナビゲーションバーの問題

3539 ワード

ナビゲーションバーの技術参考記事:http://tech.glowing.com/cn/change-uinavigationbar-backgroundcolor-dynamically/
ナビゲーションバーの問題
ナビゲーションバーが乱れる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;
}