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

目錄:
1、獲取導(dǎo)航欄,狀態(tài)欄,tabBar高度
2、導(dǎo)航欄的屬性設(shè)置
3、UIViewAnimationOptions類型
4、獲取鍵盤高度
5、解決自定義導(dǎo)航欄返回按鈕導(dǎo)致系統(tǒng)右滑返回手勢(shì)失效問題
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的屬性

// 單純?cè)O(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)場(chǎng)動(dòng)畫)
UIViewAnimationOptionShowHideTransitionViews:視圖切換時(shí)直接隱藏舊視圖、顯示新視圖,而不是將舊視圖從父視圖移除(僅僅適用于轉(zhuǎn)場(chǎng)動(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)場(chǎng)類型(僅適用于轉(zhuǎn)場(chǎng)動(dòng)畫設(shè)置,可以從中選擇一個(gè)進(jìn)行設(shè)置,基本動(dòng)畫、關(guān)鍵幀動(dòng)畫不需要設(shè)置)

UIViewAnimationOptionTransitionNone:沒有轉(zhuǎn)場(chǎng)動(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)右滑返回手勢(shì)失效問題

在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)閉指定頁面右滑手勢(shì)的話需要在該頁面這樣寫

- (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配合

使用場(chǎng)景:在多個(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:用來識(shí)別 C 和 C++ 語言
FOUNDATION_EXPORT:用來兼容 win32 應(yīng)用程序
FOUNDATION_IMPORT:用來兼容 win32 應(yīng)用程序

static和const配合

作用:聲明一個(gè)靜態(tài)的全局只讀常量
使用場(chǎng)景:在一個(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容