前言
iOS10已經(jīng)出來好幾個月了谴古,在開發(fā)的過程中遇到了一些Xcode的坑和iOS10中的bug簇抵,在這里記錄一下蝙斜。
1经磅、UITextField輸入中文后文本下移
** 觸發(fā)條件 **:系統(tǒng)為iOS10
這是一個iOS10的bug泌绣,當你在一個xib的attributes inspector中將一個UITextField的BorderStyle
設(shè)置為UITextBorderStyleNone
后,在此textField中輸入中文后文本將會下移预厌。
** 解決方法 **:
1阿迈、xib中不要設(shè)置BorderStyle,而改為在代碼中設(shè)置UITextField的BorderStyle轧叽。
- (void)awakeFromNib {
[super awakeFromNib];
self.textField.borderStyle = UITextBorderStyleNone;
}
2苗沧、不要在xib中添加UITextField.
PS:第一種解決方法并不完美刊棕,實際上當輸入的中文長度超過了textField的寬度后,文本依然會下移待逞。
參考了各種資料后,還是沒有找出最完善的解決方法飒焦,有強迫癥的話就只能避免在xib中添加UITextField了蜈膨,使用代碼添加的UITextField是沒有這個問題的。
** 參考 **:uitextfield-chinese-character-moves-down-when-editing-in-ios-10
2牺荠、打開xib文件后卡死
** 觸發(fā)條件 **:Xcode8.1打開特定xib文件
在開發(fā)的過程中發(fā)現(xiàn)使用Xcode8.1打開某些xib后翁巍,Xcode會變得異常卡頓休雌,最后不得不強制關(guān)閉Xcode灶壶。原因是這些xib是由Xcode8.0創(chuàng)建并且使用了Autolayout,而且View中的TopBar屬性設(shè)置為了非Inferred杈曲,可能是因為蘋果在Xocde8.0和8.1上對xib中相關(guān)的計算有些不同導致的驰凛。
** 解決方法 **:
將xib中TopBar屬性改為Inferred后,再用8.1打開就會不卡了担扑,但是可能會出現(xiàn)約束沖突恰响,而且不能預(yù)覽xib中的具體內(nèi)容的問題。約束沖突可以自行解決涌献,不能預(yù)覽的問題只要重啟下Xcode也能解決胚宦。
3、Xcode8.0中獲取某個view的位置有問題
** 觸發(fā)條件 **:使用Xcode8.0在xib中設(shè)置Autolayout
當我們在xib中設(shè)置好每個view的約束后燕垃,正常來說在這個xib初始化后枢劝,我們就可以在-layoutSubviews
方法(在view中)或者-viewDidLayoutSubviews
方法(在viewController中)中獲取到每一個subview被約束正確計算后的位置。
但在Xcode8.0中卜壕,這是個例外您旁,在8.0中存在一個bug:xib初始化后第一次在上述兩個方法中獲取某個被約束設(shè)置的view的frame時,返回的值會是(0, 0, 1000, 1000)
轴捎。
** 解決方法 **:
1鹤盒、升級到Xcode8.1,在8.1中這個bug已經(jīng)被修復(fù)了(就是這么簡單粗暴)轮蜕。
2昨悼、如果你沒有升級Xcode的打算,那可以在獲取view.frame前先調(diào)用該view的-layoutIfNeeded
方法跃洛。
- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel); // 1000x1000 size
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel); // normal size
}
** 參考 **:
since-xcode-8-and-ios10-views-are-not-sized-properly-on-viewdidlayoutsubviews
4率触、最后
總的來說,由于蘋果在iOS10中填加了在xib里面同時使用Autolayout和Autoresizing這一特性汇竭,導致出現(xiàn)了這幾個UI上的Bug葱蝗,只能希望蘋果趕緊修復(fù)這幾個bug了穴张。