【原】iOS學習之UITabBar的隱藏

来源:http://www.cnblogs.com/gfxxbk/archive/2016/06/17/5595335.html
-Advertisement-
Play Games

當頁面使用 UITabBarController + UINavigationController 框架的時候,當跳轉到詳情頁面的時候,如果 UITabBar 仍然存在的話就會造成邏輯混亂,用戶體驗也會下降,因此我們就有一個在詳情頁將 UITabBar 隱藏的需求,當然,在其他的一些情況也可能有隱藏 ...


 當頁面使用 UITabBarController + UINavigationController 框架的時候,當跳轉到詳情頁面的時候,如果 UITabBar 仍然存在的話就會造成邏輯混亂,用戶體驗也會下降,因此我們就有一個在詳情頁將 UITabBar 隱藏的需求,當然,在其他的一些情況也可能有隱藏 UITabBar 的需求, 在這裡小編為大家介紹三種隱藏 UITabBar 的方法,大家可以根據詳細的需求進行選擇。

1、第一種:

 直接隱藏當前頁面的 UITabBar

// 顯示tabBar
self.tabBarController.tabBar.hidden = NO;
// 隱藏tabBar
self.tabBarController.tabBar.hidden = YES;

2、第二種:

 將 push 到的頁面的 UItabBar 隱藏

// 在push跳轉時隱藏tabBar
UIViewController *vc2 = [UIViewController new];
vc2.hidesBottomBarWhenPushed = YES;
[vc1 pushViewController:vc2 animated:YES];

 該方法在push頁面的時候使用,有一定的局限性,根據其名字可以發現,只有在 push跳轉的時候才會生效,也就是說在 UITabBarController 和 UINavigationController 結合使用的時候能用。

 這也正是小編子在開篇時提到的那種情況,小編個人覺得也是比較常用的一種情況!

3、第三種:

 不使用系統提供的現有方法,自定義方法,修改 TabBar 的 subview 的 frame 就行了

 原理:

  UITabBarController的subview 共有兩個,一個叫 UITabBar,就是底下的那個 Bar;另一個叫UITranstionview,就是 Bar 上面的視圖。這兩個 view 下麵還有其他的subview,這就不用去管它了。把UITabBar的 y 向下移49個單位,把UITranstionview 的 hight 加長 49 個單位。

 代碼1:

- (void)hidesTabBar:(BOOL)hidden{
     
     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0];
     
     for (UIView *view in self.tabBarController.view.subviews) {
         if ([view isKindOfClass:[UITabBar class]]) {
             if (hidden) {
                 [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height, view.frame.size.width , view.frame.size.height)];
                
             }else{
                 [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height - 49, view.frame.size.width, view.frame.size.height)];
                 
             }
         }else{
             if([view isKindOfClass:NSClassFromString(@"UITransitionView")]){
                 if (hidden) {
                     [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height)];
                     
                 }else{
                     [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 49 )];
                    
                 }
             }
         }
     }
     [UIView commitAnimations];
     
 }

 代碼2:

-(void)makeTabBarHidden:(BOOL)hide { // Custom code to hide TabBar
    if ( [self.tabBarController.view.subviews count] < 2 )
    {
        return;
    }
    UIView *contentView; if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )
    {
        contentView = [self.tabBarController.view.subviews objectAtIndex:1];
    } else {
            contentView = [self.tabBarController.view.subviews objectAtIndex:0];
    }
    if (hide) {
        contentView.frame = self.tabBarController.view.bounds;
    } else {
            contentView.frame = CGRectMake(self.tabBarController.view.bounds.origin.x, self.tabBarController.view.bounds.origin.y,
                                           self.tabBarController.view.bounds.size.width, self.tabBarController.view.bounds.size.height -
                                           self.tabBarController.tabBar.frame.size.height);
    }
    self.tabBarController.tabBar.hidden = hide;
}

 

以上是小編總結的三種方法,也是從各位大神的博客總結的,如果有什麼新的方法,歡迎一起討論!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • var rockModule = (function () { //監聽手機搖動事件 if (window.DeviceMotionEvent) { window.addEventListener('devicemotion', deviceMotionHandler, false); } else ...
  • 1、去github官網註冊個人帳號:沒有的:猛戳這裡去註冊,比如我的賬戶名:wjf444128852,我的已經漢化(可在github里搜索github如何漢化有插件) 2、點擊倉庫-新建,倉庫名字必須是:你的github帳號.github.com或者.io 3、在該倉庫下創建index.html(可 ...
  • 說在前面: 嗯...博主現在是大一,前段時間犯腦癌想開一個技術博,記錄一下學習過程,也是這麼做的。 為什麼要學前端呢?無非就是為了走在發家致富,迎娶白富美的康莊大道上。那幾周來對前端開發已經入門了,(鼓掌,鼓掌)非常有意思。但還是感覺道阻且長。不懂的東西越來越多......不過還好,有好多人幫我呀, ...
  • 先來個相容性說明,洗洗腦: div{transform:rotate(7deg);-ms-transform:rotate(7deg); /* IE 9 */-moz-transform:rotate(7deg); /* Firefox */-webkit-transform:rotate(7deg ...
  • 遞歸函數: function factorical(num){ if(num<=1){ return 1; } else{ return num*factorical(num-1); } } factorial(2)//2 這個遞歸函數就是用函數來調用函數本身,但是這樣真的好嗎,好 接下來看這裡 v ...
  • 從jQuery API 文檔中可以知道,jQuery自定義動畫的函數.animate( properties [, duration] [, easing] [, complete] )有四個參數: properties:一組包含作為動畫屬性和終值的樣式屬性和及其值的集合 duration(可選): ...
  • 還記得之前的javascript入門裡的講的confirm 消息對話框嗎?不記得也沒關係,我們先來回顧一下,然後在詳細講它。 複習: confirm 消息對話框通常用於允許用戶做選擇的動作,如:“你對嗎?”等。彈出對話框(包括一個確定按鈕和一個取消按鈕)。 語法: 參數說明: str:在消息對話框中 ...
  • 當初始化SpaceShip原型時,我們尚未創建任何能作為第一個參數來傳遞的場景。並且SpaceShip的原型加入到場景的註冊表中,而這絕不是我們想做的。這是一種使用子類時常用的方法。應當僅僅在子類構造函數中調用父類構造函數,而不是當創建子類原型時調用它。 一旦創建了SpaceShip的原型對象,我們... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...