沖動的懲罰
自從有那段使用beta版本的Mac OSX系統(tǒng),導致機器時常開機卡死的經(jīng)歷之后,就盡量不敢在第一時間使用蘋果的beta版系統(tǒng)。但是,由于自己是名iOS開發(fā)者,當Xcode出了beta版本無疑是需要第一時間體驗一下的,即使Xcode beta版本可以不體驗,但是出了第一個Release版本卻是不得不更新。接下來講的就是在使用Xcode8.0所遇到的坑。
坑與填平坑
Storyboard
對于Storyboard相信大家對它都不陌生,自從iOS5之后就開始支持了,是一種可視化開發(fā)組件。本人使用過Android、Windows Phone以及iOS的可視化組件,可以說Storyboard是這三個平臺中最流暢、最好用的可視化開發(fā)組件,采用StoryBoard雖然會比純代碼寫UI效率上會有那么一點損耗,但對于一般的應用,在開發(fā)之初它確實可以大大的提高開發(fā)效率、也易于維護(可以想想當年那些不采用Storyboard編寫的代碼,即使更改一個坐標位置都是極其痛苦的),可以說是利大于弊。但是就在最近升級到Xcode8之后,發(fā)現(xiàn)StoryBoard有如下幾點變動(坑)。
所有UI控件的寬高設定了同一個初始值:1000。
在Xcode7的時候,StoryBoard生成的UI控件的默認寬高都是3.5英寸的寬高。采用自動布局時,在load完Storyboard之后,讀取到UI控件的寬雖然不正確,但是大部分情況下高卻是我們想要的,并且由于寬是320,是小于等于任何尺寸的寬,所以在UI渲染上并沒有可見性的問題。
但是對于Xcode8則不同,只要是通過Storyboard生成的UI都是統(tǒng)一給定一個固定值:1000。在load完Storyboard之后,自動布局計算完高度之前,讀出來的寬高都是1000。這就導致原先所有依賴于bounds計算位置寬高,沒有任何問題的UI展示邏輯,采用Xcode8一編譯就亂套了,比如會看到:圖片無故拉長后再恢復原狀,原先好好的布局出現(xiàn)了UI重疊在一起,有的UI甚至刷新不出來等。解決的辦法主要有兩個:
- 將Storyboar的打開方式選擇xcode7.x(在右側Show the file inspector->interface Builder Document->open in)。但這么做的缺點是:當你再次打開Storyboard,Xcode又幫你自動選中打開方式為Xcode8.0。而且為了以后著想,還是采用下面這種方式吧。
- 在代碼要使用UI寬高做些計算之前,調用一下layoutIfNeeded。這樣就能獲得在Storyboard設計的寬高(當使用4.0英寸來設計獲得就是在4.0英寸下的寬高,采用的是3.0英寸來設計獲得的就是3.0英寸的寬高)。
cornerRadius
本人在開發(fā)過程中還遇到了這么一個問題:明明之前顯示得好好的控件,為什么采用Xcode8編譯之后,就消失不見了呢?并且采用Capture view Hierarchy工具查看又能看見這個控件,但是在模擬器或者真機上就是死活渲染不出來。經(jīng)過各種調試最后發(fā)現(xiàn)是因為cornerRadius設置了一個比自己寬高還大的值(類似bounds.size.width / 2這樣的邏輯,由于默認寬高為1000,因此計算出來的cornerRadius就是500了,比我的控件的寬高都大),導致了控件渲染不出來。這種情況采用上面的第二種方法,在使用bounds之前l(fā)ayoutIfNeeded一下,就基本跟以前一樣了。
TableView static cells
當采用Taleview的的靜態(tài)cell之后,如果header的高度是動態(tài)變化的,不管你如何reload data,底下的cell的frame都不會發(fā)生改變,除非你自己手動設置目標cell的frame。
不支持iOS7,卻可以提交iOS7應用
Xcode8之后就不支持iOS7設備的調試了,但是Apptore卻可以提交iOS7系統(tǒng)的應用。當在iOS7設備上遇到bug的時候,調試就成了困難。你不得不再下載一個xcode7來進行iOS7的調試,并且前提是你沒有升級macOS為10.12,否則你連xcode7都打不開,更談不上調試了。雖然現(xiàn)在確實iOS7的用戶量很少,可對于一個步入正軌的app,只能是慢慢的放棄。開發(fā)工具雖不支持調試,但卻可以提交Appstore,這對于開發(fā)者來說,對老板,用戶都不好交代。既然想要放棄iOS7,為啥不干脆整個入口都封死呢?
卡卡卡
最后一點就是卡頓啊,特別是與macOS10.12配合一起,一編譯,好幾次機器幾乎就變成了單進程應用了,其他的應用瞬間失靈。大好心情轉瞬即逝啊!
最后
這次的Xcode8的升級之旅太不愉快了。經(jīng)過這幾年的iOS開發(fā),一路走來感覺蘋果的產品bug越來越多,也越來越不穩(wěn)定,真為自己擔憂啊。不知道看到這篇吐槽的iOS開發(fā)者們,你們是否也遇到了一些Xcode8的坑?