iPhone X上市了,給設(shè)計(jì)師和開(kāi)發(fā)工程師們又帶了新的挑戰(zhàn)惧盹,那一條齊劉海和四個(gè)圓角的屏幕乳幸,不得不去進(jìn)行屏幕適配瞪讼,并且蘋(píng)果的iOS11也進(jìn)行了一些方法的替換,這就讓以前寫(xiě)的代碼在iOS11的系統(tǒng)上跑起來(lái)有了不小挑戰(zhàn)粹断。
首先先說(shuō)一下安全區(qū)
以往的其他iPhone屏幕都是長(zhǎng)方形的符欠,所以里面的顯示區(qū)域不會(huì)存在遮擋的現(xiàn)象。iPhone X由于全面屏的設(shè)計(jì)姿染,在屏幕的上方背亥,下方都變成了弧形的秒际,而控件都還是長(zhǎng)方形悬赏,所以就會(huì)出現(xiàn)顯示不全的情況。
為了解決遮擋的問(wèn)題娄徊,所在在設(shè)計(jì)的時(shí)候就要避開(kāi)這個(gè)區(qū)域闽颇,所以實(shí)際的iPhone X的安全區(qū)域就是圖上所畫(huà)的綠色的區(qū)域,而白色的區(qū)域寄锐,蘋(píng)果會(huì)根據(jù)上下的顏色而自動(dòng)填充兵多。
在其他iPhone上狀態(tài)欄的高度為20個(gè)像素,而在iPhone X上狀態(tài)欄的高度變?yōu)榱?8個(gè)像素橄仆,并且在底部多出了48個(gè)像素剩膘。
當(dāng)我們打印iPhone X的屏幕尺寸時(shí)[UIScreen mainScreen].bounds.size
打印值為375x812
注意這個(gè)812是算上安全區(qū)域的大小
好了知道這些,我就就知道怎么去適配屏幕了
1.一個(gè)界面一般都會(huì)有UITableView盆顾、UIScrollView怠褐、UICollectionView,并且一般會(huì)把這些作為底部視圖
這種情況下設(shè)置視圖大小的時(shí)候個(gè)人建議直接使用self.view.bounds就可以了您宪。
像iOS11中已經(jīng)廢除了automaticallyAdjustsScrollViewInsets這個(gè)方法,所以需要進(jìn)行版本判斷
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
2.如果要拿出狀態(tài)欄的高度可以使用一個(gè)宏
// 屏幕寬高
#define kScreenW [UIScreen mainScreen].bounds.size.width
#define kScreenH [UIScreen mainScreen].bounds.size.height
// iPhone X 宏定義
#define iPhoneX (kScreenW == 375.f && kScreenH == 812.f ? YES : NO)
// 適配iPhone X 狀態(tài)欄高度
#define CF_StatusBarHeight (iPhoneX ? 44.f : 20.f)
3.如果要拿出導(dǎo)航欄的高度可以使用一個(gè)宏
// 適配iPhone X 導(dǎo)航欄高度
#define CF_NavHeight (iPhoneX ? 88.f : 64.f)
4.如果要拿出Tabbar的高度可以使用一個(gè)宏
// 適配iPhone X Tabbar距離底部的距離
#define CF_TabbarSafeBottomMargin (iPhoneX ? 34.f : 0.f)
// 適配iPhone X Tabbar高度
#define CF_TabbarHeight (iPhoneX ? (49.f+34.f) : 49.f)
iOS 11中如果不實(shí)現(xiàn)-tableView: viewForFooterInSection:
和 -tableView: viewForHeaderInSection:
奈懒,那么-tableView: heightForHeaderInSection:
和- tableView: heightForFooterInSection:
不會(huì)被調(diào)用。
這是因?yàn)?code>estimatedRowHeight estimatedSectionHeaderHeight
estimatedSectionFooterHeight
三個(gè)高度估算屬性由默認(rèn)的0變成了UITableViewAutomaticDimension
宪巨,導(dǎo)致高度計(jì)算不對(duì)磷杏,解決方法是實(shí)現(xiàn)對(duì)應(yīng)方法或吧這三個(gè)屬性設(shè)為0。
在使用圖片方面
4.7‘’及以下的設(shè)備目前使用的圖片全是@2x
plus系列和iPhone X使用的圖片是@3x