1. 程式人生 > >一行程式碼修改導航欄及狀態列的透明度

一行程式碼修改導航欄及狀態列的透明度

在以前,我們可以通過當前控制器的導航控制器再獲取到navigatioBar導航條,修改導航條的barTintColor這個屬性去修改它的透明度,如:

self.navigationController.navigationBar.barTintColor = [UIColor colorWithWhite:1.0 alpha:0.5];

但如果是沉浸式背景,那麼狀態列statusBar的白色/黑色背景又會和導航欄出現顏色不同,因此我們還得同時修改statusBar的背景顏色,如:

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"
] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5]; }

也可以給導航欄直接設定一個半透明的背景圖片,通過color生成半透明圖,這個網上很多分類,就不介紹了。

下面才是重點啊喂~!

在iOS10之後,navigationBar的barTintColor方法設定一個半透明顏色不起作用了!
取巧可以用另外一種設定方式:

[[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:0.5];        

//找到navigationBar的背景view,然後設定alpha值,這樣會連statusBar背景一併修改了

PS:如果不起作用 或者 別的控制器將導航欄上面的東西改了回去…
我們可能需要設定下面兩個引數,在viewWillAppear方法中加上這兩行程式碼,再結合上面的方法修改透明度。

self.navigationController.navigationBar.translucent = YES
; // 設定導航欄為有點透明的效果(系統給的),注意如果設定了這個引數,控制器中有scrollView的可能會向上偏移64px,也就是回到預設會被導航欄遮住的位置 self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; // 將導航條背景改為透明

效果如下:

相關推薦

一行程式碼修改導航狀態透明度

在以前,我們可以通過當前控制器的導航控制器再獲取到navigatioBar導航條,修改導航條的barTintColor這個屬性去修改它的透明度,如: self.navigationController.navigationBar.barTintColor =

iOS導航狀態Tabbar高度(區分iPhone X與其他iPhone機型)

#define kIs_iphone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define kIs_iPhoneX kScre

flutter佈局-9-appbar導航狀態

示例 github:flutterlayout https://github.com/LiuC520/flutterlayout MaterialApp AppBar: 包含狀態列和導航欄 先看下上圖的具體用法 appBar: AppBar(

Android9.0 完全隱藏導航狀態

需求:自定義介面全屏顯示,隱藏導航欄,狀態列 按照google的官方辦法,設定如下幾個Flag就可以隱藏導航欄: View decorView = getWindow().getDecorView(); // Hide both the navigation bar an

[Android6.0][RK3399] 隱藏導航狀態

Platform: RK3399 OS: Android 6.0 Version: v2017.02 什麼是導航欄與狀態列 最上面是狀態列 StatusBar 最下面是導航欄 NavagationBar 一、隱藏導航欄 方

[RK3399][Android7.1] 除錯筆記 隱藏導航狀態

平臺 核心版本 安卓版本 RK3399 Linux4.4 Android7.1 文章目錄 導航欄與狀態列

iOS 獲取導航狀態的高度

CGRect rect = [[UIApplicationsharedApplication] statusBarFrame]; 狀態列的高度: float status height =  rec

獲取導航狀態,標籤的高度

獲取導航欄的高度: self.navigationController.navigationBar.frame.size.height 寬度: self.navigationController.navigationBar.frame.size.width

獲取導航狀態的高度

// 狀態列(statusbar) CGRect rectStatus = [[UIApplication sharedApplication] statusBarFrame];

android去除標題狀態

總共有三種方式: 1)在程式碼中實現 在onCreate()方法中新增下面的的程式碼(一定要寫在setContentView()前面): //去掉標題欄 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //設定全屏

導航狀態字型顏色大小和背景顏色

1、導航欄的背景色和標題顏色大小 //設定導航欄標題顏色和大小 [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName

Android 4.4 以上實現透明導航狀態 Translucent system bar

第一種方式 第一種方式,需要做下面三步設定 1、在values、values-v19、values-v21的style.xml都設定一個 Translucent System Bar 風格的Theme values/style.xml <style name="ImageTranslucentThem

設定狀態導航背景顏色,修改導航返回按鈕顏色

1、設定狀態列為透明黑色: 在AppDelegate.h的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOption

Android標題狀態圖示文字顏色背景動態變化

android中沉浸式狀態列的文章已經滿大街了,可是在實現某些效果時,還是得各種搜尋,測試一通後,最後還常常滿足不了要求,即使好不容易在一部手機上滿足了需求,放在另外一手機上,發現效果還各種不適配。今天把自己這幾天學到的關於沉浸式狀態列知識進行總結下。 問題 比如我想實現

IOS介面元素四狀態導航、工具、TAB)設計規範

1.1 狀態列 狀態列展示於裝置和當前環境相關的重要資訊。 外觀和行為:狀態列總是出現在螢幕頂部,包含網路連線、時間、電量等使用者需要的資訊 在iPhone上,狀態列的顏色會變。而在iPad上,狀態列總是黑色的 如果你的程式不是遊戲或者媒體播

IOS介面元素四狀態導航、工具、TAB

1.狀態列 狀態列展示於裝置和當前環境相關的重要資訊 外觀和行為:狀態列總是出現在螢幕頂部,包含網路連線、時間、電量等使用者需要的信 在iPhone上,狀態列的顏色會變。而在iPad上,狀態列總是黑色的 如果你的程式不是遊戲或者媒體播放器的話,隱藏狀態列前要考慮清楚 當用戶

iOS 獲取導航狀態的高度

bsp statusbar pan frame bar gin cgrect tom uia CGRect rect = [[UIApplication sharedApplication] statusBarFrame]; 狀態欄的高度: float status

Android 動態隱藏顯示導航狀態

sets tab mil repeat art gif ava hide sticky Talk is cheap, show me the code.--Linus TorvaldsOkay, here:一、導航欄:[java] view plain copyprivat

極簡操作無需root隱藏S8導航狀態

運行 .html 驅動 root 選項 狀態欄 方法 多人 imm 距離三星Galaxy S8國行發布快一個禮拜了,相信論壇不少小同伴已經拿到手,許多人和我一樣被那塊全視曲面屏給誘惑剁手的,當拿到手把玩一段時間後卻發現這麽美的一塊屏幕居然大部分應用上下都有一行礙眼的狀態欄和

PyQt5學習記錄(2)---QMainWindow選單狀態和工具

QMainWindow是繼承自QWidget,提供一個應用程式的主視窗。通過QMainWindow你可以新增自己的QToolBars、QDockWidgets、QMenuBar、QStatusBar等。見下圖: 所以如果我們寫程式的話,主視窗一般都是繼承QMainWind