UINavigationController特性總結(1)
1.translucent屬性
translucent是navigationBar的一個屬性,當賦值為YES時(預設值),navigationBar為半透明效果.當賦值為NO時,navigationBar為不透明效果.值得注意的是,這個屬性會影響到佈局.
translucent | 顯示效果 | 佈局 |
---|---|---|
NO | 不透明 | 起始位置為64 |
YES | 半透明 | 起始位置為0 |
舉個栗子
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor orangeColor]];
self.navigationItem.title = @"Hello World";
self.navigationController.navigationBar.translucent = YES;//預設值為YES(半透明效果)
CGFloat w = [UIScreen mainScreen].bounds.size.width;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(8, 0, w-16, 220)];
imageView.image = [UIImage imageNamed:@"hy.jpg"];
[self.view addSubview:imageView];
}
@end
效果
translucent屬性設定為YES,(預設值)
圖片的y值為0,佈局的起始位置也是0
translucent屬性設定為NO
效果為不透明,圖片的y值仍然設定為0,但是佈局的起始位置變成了64
2.設定navigationBar的顏色
第一步:使用Quartz2D將顏色渲染成UIImage
第二步:使用navigationBar的setBackgroundImage:(nullable UIImage *) forBarMetrics:(UIBarMetrics)
方法將這個顏色變成的圖片設定為navigationBar的背景圖片
舉個栗子
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor orangeColor]];
self.navigationItem.title = @"Hello World";
//註釋掉這句話,系統會根據背景色是否透明而自動設定這個值
//self.navigationController.navigationBar.translucent = NO;
CGFloat w = [UIScreen mainScreen].bounds.size.width;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(8, 0, w-16, 220)];
imageView.image = [UIImage imageNamed:@"hy.jpg"];
[self.view addSubview:imageView];
UIColor *color = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
CGRect rect = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 64);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
//當color的透明度為1時(不透明),translucent自動為NO.當color的透明度小於1時,translucent自動為YES.
NSLog(@"%d",self.navigationController.navigationBar.translucent);
}
效果和特別說明
特別說明:
不再設定 navigationBar 的translucent屬性, 當更改背景顏色的透明度時,系統會根據背景色是否透明而自動設定 translucent的屬性值.即當color的透明度為1時(不透明),translucent自動為NO.當color的透明度小於1時,translucent自動為YES.顯示效果和佈局的其實位置都符合本文第一小節的敘述.
效果:
以下效果1和效果2,程式碼上只有設定顏色的這一句的alpha有區別(分別為1.0 和0.7)UIColor *color = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
相關文章
- UINavigationController 總結UINavigationController
- ES6語言特性的總結(1)
- Oracle特性總結Oracle
- iOS 8 之後UINavigationController新特性iOSUINavigationController
- Java8特性總結Java
- 機器學習模型的特性總結機器學習模型
- 總結1
- html5新特性總結HTML
- css3新特性總結CSSS3
- ES6新特性總結
- React 16 新特性使用總結React
- JDK1.8新特性總結JDK
- Rails 5 幾大新特性總結AI
- C++ 14 新特性總結C++
- oracle flashback特性學習總結Oracle
- JDBC總結1JDBC
- php總結_1PHP
- jquery 總結(1)jQuery
- 小總結(1)
- const特性總結(不斷更新)
- PHP 各個版本新特性總結PHP
- 總結PHP 7新增加的特性PHP
- HTTP/2 特性的簡單總結HTTP
- 個人總結(css3新特性)CSSS3
- C++11新特性總結 (二)C++
- C++11新特性總結 (一)C++
- C# 6.0 的新特性總結C#
- Android總結1Android
- [php]php總結(1)PHP
- jdbcTemplate使用總結1JDBC
- OOP 1~3總結OOP
- Java8常用的新特性總結Java
- Java 新特性總結——簡單實用Java
- 帶你總結ES6的特性
- iOS 12正式版新特性總結iOS
- JDK8新特性學習總結JDK
- ES6常用的新特性總結
- shell學習總結-1