GrantWard 发表于 2016-2-9 16:55:11

制作App的问题小结

首先声明我是一名iOS开发工程师,最近迷上了Linux系统开发,因此来到这里来补习C语言所以我会发一些关于iOS开发的小技巧。
——————————————————————————————————————————————————————————我是分割线
前一阵在开发app的过程中遇到了这么一个奇葩的问题如图:

当textField输入完毕失去焦点后,输入的文字会闪一下。根据这个现象首先定位这是autolayout产生的问题,于是乎就开始找各种约束,找了一圈也并没有发现任何问题。后来我想先把键盘获得焦点,View上弹的方法注释掉就是以下这些:
func keyboardWillShowNotification(notification:NSNotification) {
      let userInfo:NSDictionary = notification.userInfo!
      let rect = userInfo?.CGRectValue
      let keyBoardHeight = CGRectGetHeight(rect!)
      let keyboardDuration = userInfo?.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()后问题解决。

页: [1]
查看完整版本: 制作App的问题小结