亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中導航欄的基本使用匯總

2019-10-21 18:40:16
字體:
來源:轉載
供稿:網友

一、設置導航欄樣式

設置導航欄的樣式可分為全局設置與局部設置;

1.全局設置

全局設置一般的都是在AppDelegate中設置,這樣整個app都會生效,相關的代碼與效果圖如下:

//1.設置導航欄背景顏色[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]]; //2.設置導航欄背景圖片[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBarImg"] forBarMetrics:UIBarMetricsDefault]; //3.設置導航欄標題樣式[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor purpleColor], NSForegroundColorAttributeName, [UIFont boldSystemFontOfSize:25], NSFontAttributeName, nil]]; //4.設置導航欄返回按鈕的顏色[[UINavigationBar appearance] setTintColor:[UIColor greenColor]];//5.設置導航欄隱藏[[UINavigationBar appearance] setHidden:YES];

iOS,導航欄

設置導航欄樣式效果圖

2.局部設置:

全局設置后,如果只有其中幾個頁面導航欄樣式不同,那么我們可以使用局部設置。

注意1:局部設置與全局設置方法相同,但調用方法的對象變成了"self.navigationController.navigationBar"

注意2:局部設置必須遵循一個原則:"進入頁面時修改,離開頁面時還原”。

比如我們進入一個頁面,需要設置當前導航欄的背景色為灰色,使用如下方法:

//進入頁面時設置顏色:灰色- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigationController.navigationBar setBarTintColor:[UIColor grayColor]];}//離開頁面時還原為全局設置:橙色- (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.navigationController.navigationBar setBarTintColor:[UIColor orangeColor]];}

二、解決自定義導航欄返回按鈕后側滑不可用問題

iOS導航欄自帶的返回按鈕形式單一,所以大多情況下,我們都需要自定義導航欄返回按鈕。但是此時我們卻發現頁面的側滑返回功能不可用了。為了解決這個問題,我們需要在App中使用我們自定義的導航控制控制器,示例代碼如下:

#import “BaseNavigationController.h"//第一步:設置自定義導航控制器使用UIGestureRecognizerDelegate@interface BaseNavigationController ()<UIGestureRecognizerDelegate>@end@implementation BaseNavigationController- (void)viewDidLoad { [super viewDidLoad]; //第二步:設置自定義導航控制器的側滑手勢的代理 self.interactivePopGestureRecognizer.delegate = self;} //第三步:實現代理方法- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ if (self.childViewControllers.count == 1) { // 表示用戶在根控制器界面,就不需要觸發滑動手勢, return NO; } return YES;}@end

三、隱藏導航欄底部的分割線

隱藏導航底部分割線也是我們偶爾會遇到的開發需求,首先我們可以通過Xcode的Debug View Hierarchy功能查看導航欄的視圖結構,效果如下:

iOS,導航欄

導航欄視圖層級圖

從圖中可以看出,導航欄的底部分割線是一個UIImageView對象,而且高度只有0.5,所以我們可以據此獲取到導航欄的底部分割線對象,在一個視圖控制器中實現此需求,代碼如下:

#import "TestViewController.h"@interface TestViewController ()//第一步:設置一個屬性,存放導航欄底部分割線對象@property (nonatomic, strong) UIImageView *navBarBottomImage;@end@implementation TestViewController- (void)viewDidLoad { [super viewDidLoad]; ////第三步:獲取導航欄底部分割線對象 UIImageView *navBarBottomImage = [self findNavBarBottomImage:self.navigationController.navigationBar]; self.navBarBottomImage = navBarBottomImage; }//第四步:設置分割線的顯示或隱藏//進入頁面隱藏分割線- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.navBarBottomImage.hidden = YES;}//離開頁面時顯示分割線-(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; self.navBarBottomImage.hidden = NO;}//第二步:添加用于獲取導航欄分割線的方法//導航欄底部分割線是一個UIImageView,且高度不超過1.0個高度,可據此查找此對象-(UIImageView *)findNavBarBottomImage:(UIView *)view { if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) { return (UIImageView *)view; } for (UIView *subview in view.subviews) { UIImageView *imageView = [self findNavBarBottomImage:subview]; if (imageView) { return imageView; } } return nil;}

四、導航欄引起的布局問題

1.內容偏移屬性:automaticallyAdjustsScrollViewInsets

automaticallyAdjustsScrollViewInsets是視圖控制器的一個屬性,默認為YES,用于優化滑動類視圖(繼承于UIScrollView的視圖)在視圖控制里的顯示:

iOS系統的導航欄UINavigationBar與標簽欄UITabBar默認都是半透明模糊效果,在這種情況下系統會對視圖控制器的UI布局進行優化:視圖控制器里面第一個被添加進去的視圖是滑動類視圖,并且其Frame是整個屏幕大小時,系統會自動調整其contenInset,以保證滑動視圖里的內容不被UINavigationBar與UITabBar遮擋。

但是對于普通的視圖,此時我們仍然需要注意:非滑動視圖的布局仍然要考慮導航欄和標簽欄高度,注意不被遮擋,比如布局的時候加上導航欄高度,以免內容被導航欄遮擋。

我們可以通過一段代碼來測試一下效果,在默認導航欄(半透明)的視圖控制器里添加如下代碼:

//UITextView是滑動視圖,內容自動向下偏移,不會被導航欄覆蓋UITextView *leftTextView = [[UITextView alloc] init];leftTextView.frame = CGRectMake(0, 0,100, kDeviceHeight); //leftTextView.backgroundColor = [UIColor lightGrayColor];leftTextView.text = @"君不見,黃河之水天上來,奔流到海不復回。君不見,高堂明鏡悲白發,朝如青絲暮成雪。人生得意須盡歡,莫使金樽空對月。天生我材必有用,千金散盡還復來。";leftTextView.font = [UIFont systemFontOfSize:18];leftTextView.editable = NO;[self.view addSubview:leftTextView]; //UIView是非滑動視圖,內容被導航欄部分覆蓋UIView *rightView= [[UIView alloc] initWithFrame:CGRectMake(150, 0, 100, 100)];rightView.backgroundColor = [UIColor redColor];[self.view addSubview:rightView];

iOS,導航欄

導航欄透明情況下,滑動視圖自動偏移,普通視圖被遮擋

其實,這種系統的優化也是可以控制關閉的,關閉優化之后,滑動視圖就會和普通視圖一樣,如果還設置其布局的原點是(0,0),其內容就會被導航欄所覆蓋,關鍵代碼如下:

//automaticallyAdjustsScrollViewInsets在11.0后失效,所以需要判斷if (@available(iOS 11.0,*)) { scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;}else{ //automaticallyAdjustsScrollViewIn,關閉自動偏移的系統優化 self.automaticallyAdjustsScrollViewInsets = NO;}

2.邊緣延伸屬性:edgesForExtendedLayout

edgesForExtendedLayout也是視圖控制器的布局屬性,默認值是UIRectEdgeAll,即:當前視圖控制器里各種UI控件會忽略導航欄和標簽的存在,布局時若設置其原點設置為(0,0),視圖會延伸顯示到導航欄的下面被覆蓋。

所以我們可以設置self.edgesForExtendedLayout=UIRectEdgeNone,此時視圖控制器里內容就會避開導航欄和標簽欄了,依然是上面的leftTextView和rightView,設置了UIRectEdgeNone之后的效果圖如下:

iOS,導航欄

self.edgesForExtendedLayout=UIRectEdgeNone

3.導航欄透明屬性translucent

上述兩種屬性都是在解決導航欄半透明情況下的布局問題,但是如果我們的需求就是導航欄不透明,那么視圖控制器里的控件就會默認從(0,64)開始布局了,設置導航欄不透明的方法如下:

self.navigationController.navigationBar.translucent= NO;

 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美wwwwww| 91精品视频在线| 岛国精品视频在线播放| 久久久精品国产| 国产亚洲一级高清| 久久久久久久影院| 自拍偷拍亚洲欧美| 久青草国产97香蕉在线视频| 亚洲伊人成综合成人网| 国产91精品在线播放| 日韩少妇与小伙激情| 性色av一区二区三区在线观看| 成人精品视频久久久久| 久久亚洲成人精品| 日韩免费观看在线观看| 最近2019中文字幕一页二页| 曰本色欧美视频在线| 激情亚洲一区二区三区四区| 亚洲国产精品99| 亚洲国产一区自拍| 777777777亚洲妇女| 91丨九色丨国产在线| 亚洲国产精品悠悠久久琪琪| 51视频国产精品一区二区| 日韩在线欧美在线国产在线| 一区二区成人av| 欧美另类第一页| 日本精品免费观看| 国产97人人超碰caoprom| 亚洲a级在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲专区国产精品| 国产精品一区二区女厕厕| 精品福利免费观看| 欧美激情第一页xxx| 久久综合电影一区| 日韩欧美视频一区二区三区| 欧美日韩国产限制| 精品国产福利视频| 欧美福利视频网站| 伊人一区二区三区久久精品| 日韩av最新在线| 国产一区二区三区日韩欧美| 欧美日韩在线免费观看| 久久久久久久亚洲精品| 久久免费视频在线| 精品夜色国产国偷在线| 国产精品偷伦免费视频观看的| 亚洲性av网站| 欧美福利小视频| 国产在线观看精品| 国产在线999| 亚洲一区中文字幕在线观看| 亚洲欧美一区二区激情| 日本aⅴ大伊香蕉精品视频| 国产精品午夜视频| 最新69国产成人精品视频免费| 亚洲成人精品久久| 搡老女人一区二区三区视频tv| 欧美人与性动交a欧美精品| 日韩欧美精品中文字幕| 亚洲女人初尝黑人巨大| 精品国产乱码久久久久久天美| 国产精品第一区| 日韩国产欧美精品一区二区三区| 久久中文字幕在线视频| 亚洲人成网站999久久久综合| 亚洲精品www| 久久久久久91香蕉国产| 8090理伦午夜在线电影| 欧美成人三级视频网站| 亚洲第一页自拍| 亚洲欧美日韩国产中文| 亚洲视频一区二区| 国产极品精品在线观看| 欧洲亚洲免费视频| 亚洲国产精品热久久| 精品久久久久久久中文字幕| 国产成人亚洲综合91| 欧美电影在线免费观看网站| 精品福利在线看| 91九色国产视频| 一本色道久久综合狠狠躁篇怎么玩| 国产成人精品免费久久久久| 亚洲精品久久久久中文字幕二区| 97久久精品视频| 北条麻妃99精品青青久久| 在线播放日韩av| 91在线免费网站| 国产成人一区二区| 911国产网站尤物在线观看| 国产免费一区二区三区在线观看| 亚洲美女激情视频| 日韩在线观看av| 亚洲色图在线观看| 久久久久国产精品免费网站| 欧美成人激情图片网| 成人免费观看49www在线观看| 欧美日韩国产精品一区二区三区四区| 欧美日韩国产限制| 久久久久久久久网站| 久久久久久久久久久亚洲| 91精品国产乱码久久久久久久久| 色偷偷888欧美精品久久久| 欧美怡红院视频一区二区三区| 久久免费国产精品1| 96sao精品视频在线观看| 亚洲影院在线看| 5252色成人免费视频| 精品国产91乱高清在线观看| 亚洲欧美中文在线视频| 中文字幕亚洲专区| 日韩欧美亚洲一二三区| 国产精品欧美一区二区三区奶水| www国产亚洲精品久久网站| 亚洲美女视频网站| 久久综合国产精品台湾中文娱乐网| 色噜噜狠狠色综合网图区| 日韩视频―中文字幕| 国产精品日韩在线播放| 日韩精品视频在线观看网址| 精品久久久久久国产| 久久久久久久国产| 国产精品一区二区电影| 欧美大片大片在线播放| 精品亚洲国产视频| 久久九九亚洲综合| 亚洲天堂av电影| 亚洲欧美日韩一区二区在线| 97高清免费视频| 亚洲成人精品久久| 91亚洲国产精品| 国产伦精品一区二区三区精品视频| 日韩av日韩在线观看| 一本色道久久88综合亚洲精品ⅰ| 国产精品视频播放| 国产精品久久久久aaaa九色| 色综合伊人色综合网| 国产区精品视频| 精品免费在线观看| 精品丝袜一区二区三区| 国产日产久久高清欧美一区| 97涩涩爰在线观看亚洲| 亚洲欧美另类自拍| 精品亚洲一区二区三区四区五区| 亚洲欧美日韩网| 亚洲黄色免费三级| 亚洲女人被黑人巨大进入| 国产日韩av高清| 久久久久一本一区二区青青蜜月| 精品久久久中文| 黄色成人在线免费| 国产精品青青在线观看爽香蕉| 欧美午夜女人视频在线| 91精品91久久久久久| 国产精品久久久久77777| 亚洲一区二区三区在线免费观看| 国产精品久久久久久久久久免费| 成人黄色av播放免费| 国产91色在线| 成人伊人精品色xxxx视频| 日韩成人小视频| 国产成人精品视频在线观看| 欧美日韩爱爱视频|