9月14日凌晨1點,蘋果推送了ios10,于是一上班就迅速升級了ios10,然后坑就這樣開始了。。。
問題1
首先是xcode的問題,發現xcode升級到8才能真機運行,于是先了解了下ios10的適配。
有這個ios10適配總結,還有這個ios10適配問題收集整理,還有這個ios10適配,還有很多其他的。
這個好辦,取消nullabl關鍵字就好。
然后另一個蛋疼的問題來了
問題二,編譯不過的問題
蛋疼的clang報錯le..
這個是詳細的信息,一堆莫名其妙的東西出來了。
隱隱約約感覺是wgs84t0gcj02.o這個實現文件的問題,然后進行刪除,在run,居然成功了。
所以原因暫定為對一些c函數的支持不好。
如果發現項目奔潰的,該去檢查老舊模塊的一些老文件。沒有什么好的解決辦法,去排查警告下的那些類吧。
問題三,適配問題(如何解決)
用ios10的同學都看到了適配的問題,因為ios10更換了系統字體,之前有看到文章說在原來的基礎上加5個像素的寬度,其實這個是不夠準確詳細的,在xcode8的xib下測了一下不同長度需要的寬度。以下以15號字體為例:
xcode8下完全展示15號字體所需的frame最小寬度
字數超過20后,加5也不能滿足了。
寫了個方法,調用nsstringdrawing框架下獲取文字寬帶的方法,結果發現
1
2
3
4
5
6
7
8
9
10
11
12
|
- ( void )viewdidload { [super viewdidload]; nslog(@ "testlab width = %f" ,_testlab.frame.size.width); [self getstringwidth:@ "一一一一一一一一一一" front:[uifont systemfontofsize:10]]; } - ( void )getstringwidth:(nsstring *)str front:(uifont *)strfront { nsdictionary *attributes =[nsdictionary dictionarywithobjectsandkeys:strfront, nsfontattributename, nil]; cgsize stringsize = [str sizewithattributes:attributes]; // 規定字符字體獲取字符串size,再獲取其寬度。 cgfloat width = stringsize.width; nslog(@ " width= %f" ,width); } |
xcode7下是這樣的(托一個小伙伴運行了下)
但是xcode8下是這樣的
sizewithattributes這個方法不會撒謊,所以調這個方法的基本都沒問題。
但是如果簡單的根據字體個數來算lable的寬度,font * 字數,那就可以根據字數適當加幾個坐標。
以上所述是小編給大家介紹的xcode8下ios10常見報錯閃退,字體適配和編譯不過的問題及解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://www.jianshu.com/p/a0fe40401138