这个问题,在之前项目中偶然遇到过,但是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,完全由自己手动来布局,也不会造成错乱。