马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
首先声明我是一名iOS开发工程师,最近迷上了Linux系统开发,因此来到这里来补习C语言所以我会发一些关于iOS开发的小技巧。
——————————————————————————————————————————————————————————我是分割线
前一阵在开发app的过程中遇到了这么一个奇葩的问题如图:
当textField输入完毕失去焦点后,输入的文字会闪一下。根据这个现象首先定位这是autolayout产生的问题,于是乎就开始找各种约束,找了一圈也并没有发现任何问题。后来我想先把键盘获得焦点,View上弹的方法注释掉就是以下这些: func keyboardWillShowNotification(notification:NSNotification) {
let userInfo:NSDictionary = notification.userInfo!
let rect = userInfo[UIKeyboardFrameBeginUserInfoKey]?.CGRectValue
let keyBoardHeight = CGRectGetHeight(rect!)
let keyboardDuration = userInfo[UIKeyboardAnimationDurationUserInfoKey]?.doubleValue
UIView .animateWithDuration(keyboardDuration!) { () -> Void in
self.view.layoutIfNeeded()
self.tableView.frame = CGRectMake(0, -keyBoardHeight, self.tableView.frame.size.width, self.tableView.frame.size.height)
}
}
奇葩问题就此消失,后来我注意到这句话layoutIfNeeded()他的含义是
如果,有需要刷新的标记,立即调用layoutSubviews进行布局
意思是当你的界面约束更改了,他不会自动进行重新布局需要调用以上方法进行立刻布局。
问题来了,我的view更改的仅仅是y座标,而没有对布局进行任何的更改,调用了此方法后,view的y座标变了,所以textfield的文字就会闪,删掉self.view.layoutIfNeeded()后问题解决。
|