目錄:
1、獲取導(dǎo)航欄裸违,狀態(tài)欄,tabBar高度
2本昏、導(dǎo)航欄的屬性設(shè)置
3供汛、UIViewAnimationOptions類型
4、獲取鍵盤高度
5涌穆、解決自定義導(dǎo)航欄返回按鈕導(dǎo)致系統(tǒng)右滑返回手勢失效問題
6怔昨、const,static宿稀,extern的配合使用
7趁舀、iOS狀態(tài)欄的網(wǎng)絡(luò)活動(dòng)標(biāo)志
1、獲取導(dǎo)航欄祝沸,狀態(tài)欄矮烹,tabBar高度
1、狀態(tài)欄
CGFloat statusHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
2罩锐、導(dǎo)航欄
CGFloat navigationHeight = self.navigationController.navigationBar.frame.size.height;
3奉狈、TabBar
CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
2、導(dǎo)航欄的屬性設(shè)置
1涩惑、title的屬性
// 單純設(shè)置字體為白色
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
// 設(shè)置任意顏色仁期、字體大小
[self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:22], NSForegroundColorAttributeName:[UIColor whiteColor]}];
2、導(dǎo)航欄背景顏色
//在設(shè)置導(dǎo)航欄背景顏色的時(shí)候境氢,首先想到的是系統(tǒng)提供的方法
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
//但是我們會(huì)發(fā)現(xiàn)設(shè)置的顏色不純蟀拷,跟實(shí)際顯示出來的顏色有出入
//那么該如何正確的設(shè)置純的背景顏色呢碰纬?有兩種方法
1萍聊、通過設(shè)置navigationBar的屬性translucent,設(shè)置成NO
2悦析、通過設(shè)置navigationBar的背景圖片setBackgroundImage
//當(dāng)你按上述方法操作之后寿桨,會(huì)發(fā)現(xiàn)之前視圖里面的view的frame下移64個(gè)單位。如果工程還用到導(dǎo)航欄的顯示和隱藏的切換,那也會(huì)發(fā)現(xiàn)frame的變化亭螟,讓導(dǎo)航欄的切換變得好不自然挡鞍。
//解決辦法:
self.extendedLayoutIncludesOpaqueBars = YES;
3、導(dǎo)航欄半透明
self.navigationController.navigationBar.translucent = YES;
4预烙、隱藏導(dǎo)航欄
[self.navigationController setNavigationBarHidden:YES animated:animated];
5墨微、改變導(dǎo)航欄背景為圖片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"image"] forBarMetrics:UIBarMetricsDefault];
6、設(shè)置導(dǎo)航欄線的顏色
[self.navigationController.navigationBar setShadowImage:[Tools imageWithColor:[UIColor redColor]]];
[self.navigationController.navigationBar setBackgroundImage:[Tools imageWithColor:WHITECOLOR] forBarMetrics:UIBarMetricsDefault];
3扁掸、UIViewAnimationOptions類型
1翘县、常規(guī)動(dòng)畫屬性設(shè)置(可以同時(shí)選擇多個(gè)進(jìn)行設(shè)置)
UIViewAnimationOptionLayoutSubviews:動(dòng)畫過程中保證子視圖跟隨運(yùn)動(dòng)
UIViewAnimationOptionAllowUserInteraction:動(dòng)畫過程中允許用戶交互
UIViewAnimationOptionBeginFromCurrentState:所有視圖從當(dāng)前狀態(tài)開始運(yùn)行
UIViewAnimationOptionRepeat:重復(fù)運(yùn)行動(dòng)畫
UIViewAnimationOptionAutoreverse :動(dòng)畫執(zhí)行結(jié)束點(diǎn)后反向再執(zhí)行一次
UIViewAnimationOptionOverrideInheritedDuration:忽略嵌套動(dòng)畫時(shí)間設(shè)置
UIViewAnimationOptionOverrideInheritedCurve:忽略嵌套動(dòng)畫速度設(shè)置
UIViewAnimationOptionAllowAnimatedContent:動(dòng)畫過程中重繪視圖(注意僅僅適用于轉(zhuǎn)場動(dòng)畫)
UIViewAnimationOptionShowHideTransitionViews:視圖切換時(shí)直接隱藏舊視圖、顯示新視圖谴分,而不是將舊視圖從父視圖移除(僅僅適用于轉(zhuǎn)場動(dòng)畫)
UIViewAnimationOptionOverrideInheritedOptions :不繼承父動(dòng)畫設(shè)置或動(dòng)畫類型
2锈麸、動(dòng)畫速度控制(可從其中選擇一個(gè)設(shè)置)
UIViewAnimationOptionCurveEaseInOut:動(dòng)畫先加速后減速,默認(rèn)
UIViewAnimationOptionCurveEaseIn :動(dòng)畫由慢到快
UIViewAnimationOptionCurveEaseOut:動(dòng)畫由快到慢
UIViewAnimationOptionCurveLinear :動(dòng)畫勻速執(zhí)行
3牺蹄、轉(zhuǎn)場類型(僅適用于轉(zhuǎn)場動(dòng)畫設(shè)置忘伞,可以從中選擇一個(gè)進(jìn)行設(shè)置,基本動(dòng)畫沙兰、關(guān)鍵幀動(dòng)畫不需要設(shè)置)
UIViewAnimationOptionTransitionNone:沒有轉(zhuǎn)場動(dòng)畫效果
UIViewAnimationOptionTransitionFlipFromLeft :從左側(cè)翻轉(zhuǎn)效果
UIViewAnimationOptionTransitionFlipFromRight:從右側(cè)翻轉(zhuǎn)效果
UIViewAnimationOptionTransitionCurlUp:向后翻頁的動(dòng)畫過渡效果
UIViewAnimationOptionTransitionCurlDown :向前翻頁的動(dòng)畫過渡效果
UIViewAnimationOptionTransitionCrossDissolve:舊視圖溶解消失顯示下一個(gè)新視圖的效果
UIViewAnimationOptionTransitionFlipFromTop :從上方翻轉(zhuǎn)效果
UIViewAnimationOptionTransitionFlipFromBottom:從底部翻轉(zhuǎn)效果
4氓奈、獲取鍵盤高度
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
- (void)keyboardWillShow:(NSNotification *)noti {
//鍵盤的frame
CGRect frame = [[noti.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
}
- (void)keyboardWillHide:(NSNotification *)noti {
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
5、解決自定義導(dǎo)航欄返回按鈕導(dǎo)致系統(tǒng)右滑返回手勢失效問題
在BaseNavigationController里寫上
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
}
可是這樣會(huì)導(dǎo)致導(dǎo)航頁的首頁右滑卡屏的問題鼎天,所以還需加入
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return self.childViewControllers.count > 1;
}
如果想關(guān)閉指定頁面右滑手勢的話需要在該頁面這樣寫
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
搞定探颈!
6、const训措,static伪节,extern的配合使用
const:修飾右邊的變量,被修飾的變量是只讀的
static:
修飾局部變量:只會(huì)初始化一次绩鸣,在程序中只有一份內(nèi)存怀大,不可改變其作用域,延長生命周期
修飾全局變量:作用域只限于當(dāng)前文件呀闻,外部類是不可以訪問到該全局變量的(即使在外部使用extern關(guān)鍵字也無法訪問)
extern:只是用來獲取全局變量(包括全局靜態(tài)變量)的值化借,不能用于定義變量
extern和const配合
使用場景:在多個(gè)文件中經(jīng)常使用的同一個(gè)字符串常量
寫法:通常單獨(dú)創(chuàng)建一個(gè)LYConfigutaitons文件
// LYConfigutaitons.h
#import <Foundation/Foundation.h>
extern NSString *const kAppKey;
// LYConfigutaitons.m
#import "LYConfigutaitons.h"
NSString *const kAppKey = @"1234567890";
extern
可以替換成
FOUNDATION_EXTERN
:用來識別 C 和 C++ 語言
FOUNDATION_EXPORT
:用來兼容 win32 應(yīng)用程序
FOUNDATION_IMPORT
:用來兼容 win32 應(yīng)用程序
static和const配合
作用:聲明一個(gè)靜態(tài)的全局只讀常量
使用場景:在一個(gè)文件中經(jīng)常使用的同一個(gè)字符串常量,用來代替宏捡多,且僅限當(dāng)前文件訪問
寫法:通常寫在.m文件中蓖康,且只在此文件內(nèi)使用
static NSString *const key = @"name";
7、iOS狀態(tài)欄的網(wǎng)絡(luò)活動(dòng)標(biāo)志
// 顯示狀態(tài)欄的網(wǎng)絡(luò)活動(dòng)標(biāo)志
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
// 隱藏狀態(tài)欄的網(wǎng)絡(luò)活動(dòng)標(biāo)志
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];