這個問題,在之前項目中偶然遇到過,但是bug不明顯,也不知道具體是哪種重現方式重現的,所以一直暫時略過了,但是隨着項目的系統的規模變大,代碼量越多,
這個問題出現的越來越明顯了。
於是就只能靠百度和google了,然后體會到百度是沒有成功的結果的,但是google卻有成功的結果:http://blog.csdn.net/qq_29892943/article/details/50515150
下面就拷貝復制作者的筆記:
最近在使用UITextField這個控件的時候,突然發現了一個問題,就是本來用起來沒問題的,但是突然在輸入文字之后切換到后台,然后再切換到前台,這時候在繼續輸入文字,會發現UITextField里面的文字往下偏移了,而且還會出現閃現等問題。於是,各種測試找答案,終於揪出了這個問題的關鍵點。
首先,我的這個問題出現在UINavigationController身上,ios7.0之后,當在UINavigationController的管理下push到一個新界面的時候,默認的新界面的frame自動下拉了64(也就是導航欄和狀態欄的高度),底部不會變,依然會在屏幕的最下方。其實這一切都是automaticallyAdjustsScrollViewInsets在作怪。self.automaticallyAdjustsScrollViewInsets 這個屬性是IOS7才有的新方法,目的就是為了讓scrollView自動適應屏幕。這個屬性默認時yes,也就是自動在UINavigationController的push下,自動讓下一個界面的屏幕的frame下拉了64。要不然,如果下一個界面時tableview,那么導航欄早就把tableview里面的第一行數據給蓋着了。所以,UITextField出現這樣的問題,也是automaticallyAdjustsScrollViewInsets在中間搞的鬼,所以只要我們加入self.automaticallyAdjustsScrollViewInsets=NO;就可以解決了。而且當我們一個界面有多個tableView之類的,將它設置為NO,完全由自己手動來布局,也不會造成錯亂。