iOS開發(fā)小技巧及小知識點(diǎn)(三)

目錄:
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];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垒手,一起剝皮案震驚了整個(gè)濱河市蒜焊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌科贬,老刑警劉巖泳梆,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡优妙,警方通過查閱死者的電腦和手機(jī)乘综,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來套硼,“玉大人卡辰,你說我怎么就攤上這事⌒耙猓” “怎么了看政?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵廉羔,是天一觀的道長饶深。 經(jīng)常有香客問我,道長迟几,這世上最難降的妖魔是什么呆贿? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任嚷兔,我火速辦了婚禮,結(jié)果婚禮上做入,老公的妹妹穿的比我還像新娘冒晰。我一直安慰自己,他們只是感情好竟块,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布壶运。 她就那樣靜靜地躺著,像睡著了一般浪秘。 火紅的嫁衣襯著肌膚如雪蒋情。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天耸携,我揣著相機(jī)與錄音棵癣,去河邊找鬼。 笑死夺衍,一個(gè)胖子當(dāng)著我的面吹牛狈谊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沟沙,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼河劝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了矛紫?” 一聲冷哼從身側(cè)響起赎瞎,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎含衔,沒想到半個(gè)月后煎娇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體二庵,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贪染,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年缓呛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杭隙。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哟绊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痰憎,到底是詐尸還是另有隱情票髓,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布铣耘,位于F島的核電站洽沟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜗细。R本人自食惡果不足惜裆操,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炉媒。 院中可真熱鬧踪区,春花似錦、人聲如沸吊骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽白粉。三九已至传泊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸭巴,已是汗流浹背或渤。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奕扣,地道東北人薪鹦。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像惯豆,于是被迫代替她去往敵國和親池磁。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容