1. 程式人生 > >WAPG4 解決透明導航欄返回黑塊

WAPG4 解決透明導航欄返回黑塊

不做gif了,雖然我會做^ ^,具體情況你遇到了就知道我說的是什麼,沒遇到這篇文章對你也沒有價值。

具體來說就是,我APP中根檢視導航欄是透明的,二級頁面導航欄是不透明的,在頁面切換的時候會看到黑塊,這個在加入了手勢後更加明顯,總之就是頁面切換不平滑,這讓有強迫症的我怎麼看的舒服。

之前一直沒有很好的解決辦法,後來在看到《一個絲滑的全屏滑動返回手勢》後,裡面一句話提醒了我,是講手機QQ的頁面切換的,“它的個人中心頁面上面的 bar 是隱藏狀態,然後做了個和其他頁面很像的假 bar,但返回手勢一開始就露餡了,為了彌補,還做了下後面真 bar 的 alpha 值動畫,兩個返回按鈕還是重疊在了一起。”,於是,就有思路了,我在頁面出現的時候隱藏真正的NavigationBar,讓自己新增的假的NavigationBar佔坑,並配置透明,頁面結束的時候,設定真的NavigationBar顯示,這樣不影響二級頁面導航欄的顯示,幾處程式碼貼下

@property (weak, nonatomic) IBOutlet UINavigationBar *customNavigationBar;

- (void)initCustomNavigationBar {
    self.customNavigationBar.translucent = YES;
    //去掉背景圖片
    [self.customNavigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    //去掉底部線條
    [self.customNavigationBar setShadowImage:[[UIImage alloc] init]];
    //調整偏移inset,使得圖片能從螢幕頂部開始顯示,顯示在導航欄下面
    self.automaticallyAdjustsScrollViewInsets = NO;
}


//對導航欄隱藏的設定,避免子頁面缺失
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

大概就是這個樣子,真正是困擾自己很久了,這個問題

當然我也使用了文章作者的FDFullscreenPopGesture,這樣在每個介面都有了右滑返回的手勢,不用自己添加了,聽說是用了AOP,這個我不太懂,找時間看下,反正新增兩個檔案後就自帶了手勢(聽說用了私有API,到時候注意下)。

參考資料:

1.一個絲滑的全屏滑動返回手勢:http://blog.sunnyxx.com/2015/06/07/fullscreen-pop-gesture/