升級(jí)xCode9 導(dǎo)航欄變化及一些小技巧

導(dǎo)航欄

導(dǎo)航欄高度的變化

iOS11之前導(dǎo)航欄默認(rèn)高度為64pt(這里高度指statusBar + NavigationBar)惭缰,iOS11之后如果設(shè)置了prefersLargeTitles = YES則為96pt昙啄,默認(rèn)情況下還是64pt,但在iPhoneX上由于劉海的出現(xiàn)statusBar由以前的20pt變成了44pt涡戳,所以iPhoneX上高度變?yōu)?8pt,如果項(xiàng)目里隱藏了導(dǎo)航欄加了自定義按鈕之類的,這里需要注意適配一下。

導(dǎo)航欄圖層及對(duì)titleView布局的影響

iOS11之前導(dǎo)航欄的title是添加在UINavigationItemView上面迫摔,而navigationBarButton則直接添加在UINavigationBar上面,如果設(shè)置了titleView泥从,則titleView也是直接添加在UINavigationBar上面句占。iOS11之后,大概因?yàn)閘argeTitle的原因躯嫉,視圖層級(jí)發(fā)生了變化纱烘,如果沒(méi)有給titleView賦值,則titleView會(huì)直接添加在_UINavigationBarContentView上面祈餐,如果賦值了titleView擂啥,則會(huì)把titleView添加在_UITAMICAdaptorView上,而navigationBarButton被加在了_UIButtonBarStackView上帆阳,然后他們都被加在了_UINavigationBarContentView上哺壶,如圖:

所以如果你的項(xiàng)目是自定義的navigationBar,那么在iOS11上運(yùn)行就可能出現(xiàn)布局錯(cuò)亂的bug舱痘,解決辦法是重寫(xiě)UINavigationBar的layoutSubviews方法变骡,調(diào)整布局离赫,上代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17-?(void)layoutSubviews?{

[superlayoutSubviews];

//注意導(dǎo)航欄及狀態(tài)欄高度適配

self.frame?=?CGRectMake(0,0,?CGRectGetWidth(self.frame),?naviBarHeight);

for(UIView?*viewinself.subviews)?{

if([NSStringFromClass([viewclass])?containsString:@"Background"])?{

view.frame?=?self.bounds;

}

elseif([NSStringFromClass([viewclass])?containsString:@"ContentView"])?{

CGRect?frame?=?view.frame;

frame.origin.y?=?statusBarHeight;

frame.size.height?=?self.bounds.size.height?-?frame.origin.y;

view.frame?=?frame;

}

}

}

再補(bǔ)充一點(diǎn)芭逝,看了簡(jiǎn)書(shū)App適配iOS11發(fā)現(xiàn)titleView支持autolayout,這要求titleView必須是能夠自撐開(kāi)的或?qū)崿F(xiàn)了- intrinsicContentSize方法

1

2

3-?(CGSize)intrinsicContentSize?{

returnUILayoutFittingExpandedSize;

}

UIScrollView渊胸、UITableView旬盯、UICollectionView

大家在iOS11設(shè)備上運(yùn)行出現(xiàn)最多問(wèn)題應(yīng)該就是tableview莫名奇妙的偏移20pt或者64pt了。翎猛。原因是iOS11棄用了automaticallyAdjustsScrollViewInsets屬性胖翰,取而代之的是UIScrollView新增了contentInsetAdjustmentBehavior屬性,這一切的罪魁禍?zhǔn)锥际切乱氲膕afeArea切厘,關(guān)于safeArea適配這篇文章iOS 11 安全區(qū)域適配總結(jié)講的很詳細(xì)萨咳,感興趣的可以看下,我直接貼適配代碼疫稿,因?yàn)榈桶姹局苯佑胏ontentInsetAdjustmentBehavior會(huì)報(bào)警告培他,所有定義了如下的宏(感謝@炒雞范的指正,之前的宏犯了個(gè)低級(jí)錯(cuò)誤...現(xiàn)改為)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16#define??adjustsScrollViewInsets(scrollView)\

do{\

_Pragma("clang?diagnostic?push")\

_Pragma("clang?diagnostic?ignored?\"-Warc-performSelector-leaks\"")\

if([scrollView?respondsToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")])?{\

NSMethodSignature?*signature?=?[UIScrollView?instanceMethodSignatureForSelector:@selector(setContentInsetAdjustmentBehavior:)];\

NSInvocation?*invocation?=?[NSInvocation?invocationWithMethodSignature:signature];\

NSInteger?argument?=2;\

invocation.target?=?scrollView;\

invocation.selector?=?@selector(setContentInsetAdjustmentBehavior:);\

[invocation?setArgument:&argument?atIndex:2];\

[invocation?retainArguments];\

[invocation?invoke];\

}\

_Pragma("clang?diagnostic?pop")\

}while(0)

還有的發(fā)現(xiàn)某些界面tableView的sectionHeader遗座、sectionFooter高度與設(shè)置不符的問(wèn)題舀凛,在iOS11中如果不實(shí)現(xiàn) -tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection: ,則-tableView: heightForHeaderInSection:和- tableView: heightForFooterInSection:不會(huì)被調(diào)用途蒋,導(dǎo)致它們都變成了默認(rèn)高度猛遍,這是因?yàn)閠ableView在iOS11默認(rèn)使用Self-Sizing,tableView的estimatedRowHeight、estimatedSectionHeaderHeight懊烤、 estimatedSectionFooterHeight三個(gè)高度估算屬性由默認(rèn)的0變成了UITableViewAutomaticDimension梯醒,解決辦法簡(jiǎn)單粗暴,就是實(shí)現(xiàn)對(duì)應(yīng)方法或把這三個(gè)屬性設(shè)為0腌紧。

如果你使用了Masonry冤馏,那么你需要適配safeArea

1

2

3

4

5if(@available(iOS11.0,?*))?{

make.edges.equalTo()(self.view.safeAreaInsets)

}else{

make.edges.equalTo()(self.view)

}

iPhoneX

LaunchImage

關(guān)于iPhoneX(我就不吐槽劉海了...),如果你的APP在iPhoneX上運(yùn)行發(fā)現(xiàn)沒(méi)有充滿屏幕寄啼,上下有黑色區(qū)域逮光,那么你應(yīng)該也像我一樣LaunchImage沒(méi)有用storyboard而是用的Assets,解決辦法如圖墩划,啟動(dòng)圖的尺寸為1125x2436涕刚,or you caniOS開(kāi)發(fā)時(shí)如何使用 Launch Screen Storyboard

TabBarController

因?yàn)槲覀兊捻?xiàng)目用了第三方的TabBarController乙帮,在iPhoneX運(yùn)行杜漠,tabBar看起來(lái)怪怪的...估計(jì)作者要等到猴年馬月才適配iPhoneX,項(xiàng)目又著急上線察净,就自己修改了第三方驾茴,主要是tabBar高度及tabBarItem偏移適配,iPhoneX由于底部安全區(qū)的原因UITabBar高度由49pt變成了83pt氢卡,可以通過(guò)判斷機(jī)型來(lái)修改相關(guān)界面代碼

1

#define?kDevice_Is_iPhoneX?([UIScreen?instancesRespondToSelector:@selector(currentMode)]???CGSizeEqualToSize(CGSizeMake(1125,2436),?[[UIScreen?mainScreen]?currentMode].size)?:?NO)

1.模擬器的變化

相信很多人不太習(xí)慣新版模擬器, 那么如何恢復(fù)呢, 看下圖:是不是切換很隨意.

2.Jump to Definition 點(diǎn)擊對(duì)象跳轉(zhuǎn)

在XCode9之前,在變量或方法上, 按CMD+單擊, 是直接Jump to Definition,但是現(xiàn)在, 是彈出這個(gè)菜單, 對(duì)于跳轉(zhuǎn)到變量的定義,就多了一步了,開(kāi)始可能會(huì)覺(jué)得不方便 對(duì)于想直接跳轉(zhuǎn)到變量定義,現(xiàn)在是 control+command+單擊, 也可以:

鼠標(biāo)用戶: 對(duì)準(zhǔn)你的對(duì)象锈至,Command+鼠標(biāo)右鍵

觸摸板用戶: 對(duì)準(zhǔn)你的對(duì)象, Command+雙指點(diǎn)擊

如果你有強(qiáng)迫癥, 非要找回之前一模一樣的感覺(jué), 我也可以幫你哦:

是不是很爽啊, 找回初戀的感覺(jué)!

3.折疊代碼

Xcode9之前:

局部折疊(折疊一個(gè)函數(shù)):Command+Option+Left/Right

全局折疊(折疊當(dāng)前文件下的全部函數(shù)): Shift+Command+Option+Left/Right

折疊注釋塊:(/* */之間的文字):Ctrl+Shift+Command+Left/Right

現(xiàn)在:Fold,可以用來(lái)折疊方法:

4.代碼編譯器可以放大/縮小自由切換

你還為每周的團(tuán)隊(duì)代碼分享因屏幕小看不清代碼而糾結(jié)嗎? 這里就解決了這個(gè)問(wèn)題!

cmd +/- ?可以實(shí)現(xiàn)編譯器的放大縮小

5.無(wú)線開(kāi)發(fā)真機(jī)調(diào)試

目前僅支持ios11的真機(jī),使用較簡(jiǎn)單,只需在window->Devices and Simulators 下連真機(jī)勾選Connect via network, 需要注意的是,必須在一個(gè)局域網(wǎng)下:

6.XCode內(nèi)置的git系統(tǒng)

Source Control的極大增強(qiáng)

支持Github賬戶, XCode -> Preferences -> Accouts 可以登錄你的GitHub賬戶, 登錄后如下:

通過(guò)Xcode的菜單 Source Control 最下方的clone, 就可以clone你的github上的工程了,是不是非常方便呢?

7.模擬器可以多開(kāi)了,并且,模擬器可以登錄

這里不做過(guò)多介紹

8.代碼重構(gòu)

對(duì)一個(gè)方法或者變量的重命名, 在方法上CMD+單擊, 出現(xiàn)的菜單, 選擇rename 可以看到, 它把重命名會(huì)出現(xiàn)的改動(dòng),比較直觀哈!

9.Folder和Group的同步問(wèn)題

在此之前,我們?cè)赬Code中,更改Folder的名字,在FInder中工程對(duì)應(yīng)的文件夾的名字并不會(huì)同步的改變,這會(huì)造成我們重命名文件夾變得非常不方便,最終要先在XCode中移除,然后在Finder中重命名,再添加回Xcode

現(xiàn)在 在Xcode9中重名命Folder,Finder中的也同步的改變了 我們之前建議一個(gè)虛擬的group,并不會(huì)在對(duì)應(yīng)的文件夾中建立真實(shí)的目錄

Xcode9中,默認(rèn)行為改變了, 變成了會(huì)建立對(duì)應(yīng)的真實(shí)文件夾, 如果你需要像之前那樣只是建立虛擬的group, 選擇New Group without Folder 即可!

Show in Finder 可以看到,建立了真實(shí)的文件夾:

你可能你會(huì)擔(dān)心, 區(qū)分不了這個(gè)group到底是虛擬的,還是實(shí)際的, 蘋(píng)果給出了標(biāo)識(shí)來(lái)區(qū)分的, 虛擬的左下角有個(gè)小的三角形, 如圖:

10.意外警告

如果你收到 This block declaration is not a prototype

Insert ‘void’ 這個(gè)警告,如何徹底關(guān)閉呢?

Build Settings -> Strict Prototypes 設(shè)置為NO即可, 這只是個(gè)臨時(shí)方案.

11.創(chuàng)建新的顏色 asset catalog

通常我們會(huì) New image ?set, 現(xiàn)在可以 New color set, 然后填充 rgb alpha 值, 具體怎么操作呢?

Assets.xcassets -> + -> New color set-> 填充RGB及alpha

代碼調(diào)用方法:

UIColor*customColor;// colorNamed: iOS11才有的, 要做版本判斷.if(@available(iOS11, *)) {// customColor是自定義顏色的文件名字.customColor = [UIColorcolorNamed:@"customColor"];? ? ?}else{ ? ? ? ?customColor = [UIColorcolorWithRed:1green:0.427blue:1.0alpha:1.0]; ? ?}

原文:http://www.cocoachina.com/ios/20170921/20623.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市译秦,隨后出現(xiàn)的幾起案子峡捡,更是在濱河造成了極大的恐慌,老刑警劉巖筑悴,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件们拙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阁吝,警方通過(guò)查閱死者的電腦和手機(jī)砚婆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)突勇,“玉大人装盯,你說(shuō)我怎么就攤上這事∮刖常” “怎么了验夯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)摔刁。 經(jīng)常有香客問(wèn)我挥转,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任绑谣,我火速辦了婚禮党窜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘借宵。我一直安慰自己幌衣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布壤玫。 她就那樣靜靜地躺著豁护,像睡著了一般。 火紅的嫁衣襯著肌膚如雪欲间。 梳的紋絲不亂的頭發(fā)上楚里,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音猎贴,去河邊找鬼班缎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛她渴,可吹牛的內(nèi)容都是我干的达址。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼趁耗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沉唠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起对粪,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤右冻,失蹤者是張志新(化名)和其女友劉穎装蓬,沒(méi)想到半個(gè)月后著拭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牍帚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年儡遮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暗赶。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鄙币,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蹂随,到底是詐尸還是另有隱情十嘿,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布岳锁,位于F島的核電站绩衷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咳燕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一勿决、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧招盲,春花似錦低缩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至顶籽,卻和暖如春么介,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜕衡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工壤短, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慨仿。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓久脯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親镰吆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帘撰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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