一直寫好了沒有發(fā)布出來蔬啡,現(xiàn)在抽空把它完善下,總結下自己對于iOS 11相關的適配 此刻有空正好把前段時間適配iOS 11 和iPhoneX 相關的一些技術點和適配更新與大家分享下箱蟆,如有不明確或者是不對的地方可以留言指正,謝謝空猜!
iOS11中新增了以下的Key:
》 NFCReaderUsageDescription
》 NSFaceIDUsageDescription
》 NSPhotoLibraryAddUsageDescription
如果你的App使用到了NFC、FaceID辈毯、保存圖片的功能,記得添加相應的Key钝凶。
iOS10上圖庫的訪問和寫入權限依然依賴于NSPhotoLibraryUsageDescriptionKey唁影,如果在iOS10上只添加了NSPhotoLibraryAddUsageDescription而沒有添加NSPhotoLibraryUsageDescription耕陷,當訪問圖庫或者保存圖片時應用依然會發(fā)生Crash
iOS11上只要添加了NSPhotoLibraryAddUsageDescription即具備圖庫的訪問和寫入權限据沈,無需增加NSPhotoLibraryUsageDescription
iOS11上即使不添加NSPhotoLibraryUsageDescription和NSPhotoLibraryAddUsageDescription也可以通過UIImagePickerController來訪問圖庫(其他API方式未測試,真機和模擬器均可訪問到圖庫數(shù)據(jù))卓舵,也不知道是否是Bug,居然不需要申請權限就可以訪問系統(tǒng)圖片裹虫。
綜上所述,如果App需要兼容iOS10筑公,則添加NSPhotoLibraryUsageDescription和NSPhotoLibraryAddUsageDescription尊浪,如果只兼容iOS11則只添加NSPhotoLibraryAddUsageDescription即可匣屡。
iOS 11 UITableView 小更新
iOS 中 UITableView 中有一種比較常用的樣式 UITableViewStyleGrouped。有時我們要隱去 section 頭尾的話誉结,經(jīng)常實現(xiàn)如下:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 0.1f;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1f;
}
如果只實現(xiàn)這2段代碼的話券躁,在 iOS 11 之前是不會出現(xiàn)問題的,但 iOS 11 之后需要同時實現(xiàn)如下也拜,因為iOS11,tableview系統(tǒng)默認開啟了Self-Sizing:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
return nil;
}
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return nil;
}
或者是
self.estimatedRowHeight = 0;
self.estimatedSectionHeaderHeight = 0;
self.estimatedSectionFooterHeight = 0;
跳轉App Store評論變更
iOS11以前:
- (void)goToAppStore
{
NSString *itunesurl = @"[http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=XXXXXXXX&pageNumber=0&sortOrdering=2&type=Purple](http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=XXXXXXXX&pageNumber=0&sortOrdering=2&type=Purple)+Software&mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:itunesurl]];
}
iOS11之后:
- (void)goToAppStore
{
NSString *itunesurl = @
"itms-[apps://itunes.apple.com/cn/app/idXXXXXX?mt=8&action=write-review](apps://itunes.apple.com/cn/app/idXXXXXX?mt=8&action=write-review)";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:itunesurl]];
}
iPhoneX 適配
LaunchImage 中添加一個和 iPhone X 相關的啟動圖片
圖片尺寸:1125 * 2436
Status Bar
iPhone X 上的 StatusBar 高度比之前的 iPhone 高一些蔓钟,也就是說卵贱,我們如果寫死20pt高度的 frame 布局奋刽,都要大面積修(tu)改(xue)艰赞。在 iPhone X 上,通過打印 [[UIApplication sharedApplication] statusBarFrame] 可以看到方妖,高度是44pt。
屏幕底部
因為沒有了 Home 鍵雌澄,iPhone X 的底部是預留給系統(tǒng)功能的一個區(qū)域 - Home Indicator杯瞻,這部分的高度是34pt镐牺。 這就導致了zhnegnev
1.首先簡單定義一下IPoneX
#define IPHONE_X (Screen_Height == 812.0f) ? YES : NO
2.簡單了解下IPhoneX 導航欄 狀態(tài)欄 tabar高度
1.導航欄高度 88 非非IPoneX手機為64
2.狀態(tài)欄高度44 非IPoneX手機為20
3.tabar高度83 非IPhoneX手機為49
Xcode
Xcode 9支持開啟多個模擬器
在使用模擬器過程中,相信大家都發(fā)現(xiàn)選擇不同的模擬器運行可以同時運行睬涧,不會把之前的模擬器給擠退掉,這個功能的更新方便了開發(fā)者去適配不同設備的UI畦浓,不過,開啟多個模擬器的代價是會影響到電腦的速度讶请。
不同模擬器下App的顯示效果(如下圖)
可以在模擬器的Hardware->Device中啟動新的模擬器(如下圖)
Xcode 9全屏模式下與模擬器分屏
在Xcode 9之前屎媳,如果Xcode是全屏模式论巍,那么使用模擬器時會有些不方便风响,看效果時需要切換屏幕很累的。給力的是在Xcode 9中钞诡,添加了一個新功能湃崩,即在全屏模式下,可以和模擬器在同一屏幕上分屏操作攒读,如下圖所示。
// 模擬器全屏
在模擬器設置中需要模擬器開啟“允許全屏模式”薄扁,只需要勾選上Internal->Allow Fullscreen Mode,再把模擬器拖入Xcode所在屏幕即可脱盲。如下圖所示。
// 模擬器設置全屏
無線真機調試
之前如若要真機調試必須要連接數(shù)據(jù)線钱反,現(xiàn)在方便了匣距,可以通過WIFI無線安裝App了面哥,
不過需要Xcode9并且運行iOS11+的版本才能使用毅待,
還有就是Mac和iPhone必須連接同一個WiFi網(wǎng)絡。
操作如下:
- 用數(shù)據(jù)線連接Mac和iPhone
- 選擇Xcode menu的Window -> Devices and Simulator
- 勾選Connect via network如果通過網(wǎng)絡成功連接到iPhone吱涉,就可以拔掉數(shù)據(jù)線愉快的進行無線真機調試
同時也可以通過輸入iPhone的IP進行連接外里。
小技巧
開始大家可能會覺得不方便邑飒,對于想直接跳轉到變量定義,現(xiàn)在是 control+command+單擊
當然,如果你還是覺得以前的cmd+單擊 跳轉到變量定義,你更習慣,可以在這里設置一下就變?yōu)樵瓉淼姆绞搅恕?/p>