iOS 10 - UITableViewController在加载时滚动到底部

时间:2016-09-25 05:28:16

标签: ios swift uitableview autoscroll becomefirstresponder

我有一个UITableViewController的子类,它显示了几行(确切地说是8行),其中顶行是包含UITextField的自定义单元格。加载视图后,我通过调用becomeFirstResponder上的textfield立即弹出键盘。这一切都运行良好,直到我从 iOS 9 升级到 iOS 10 。现在视图跳到视图的底部,键盘覆盖了我的最后两行,我的TextField离开了可见区域。当我注释掉becomeFirstResponder电话时,跳跃消失了,但我当然失去了键盘弹出窗口。这就是我的代码看起来......

class UserProfileTableViewController: UITableViewController {

  private var userInfoCell: UserInfoTableViewCell?
  ...

  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

  if indexPath.section == 0 {
    userInfoCell = tableView.dequeueReusableCellWithIdentifier("userInfoCell", forIndexPath: indexPath) as? UserInfoTableViewCell

    if !editMode {
      userInfoCell?.nameField.becomeFirstResponder()
    }

    return userInfoCell!
  }
  else if indexPath.section == 1 {
   ....

然后我的自定义表格视图单元格如下......

class UserInfoTableViewCell: UITableViewCell, UITextFieldDelegate,, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var photoImageView: UIImageView!
...

override func awakeFromNib() {
  super.awakeFromNib()
  // listen for when user touches a textfield
  nameField.delegate = self
  ...
}

override func setSelected(selected: Bool, animated: Bool) {
  super.setSelected(selected, animated: animated)
}

...

我尝试过的事情:

  1. userInfoCell?.nameField.becomeFirstResponder()
  2. 中呼叫viewWillAppear()
  3. userInfoCell?.nameField.becomeFirstResponder()
  4. 中呼叫viewDidAppear()
  5. nameField.becomeFirstResponder()。{/ li>中呼叫UserInfoTableViewCell.awakeFromNib()
  6. 致电tableView.scrollToRowAtIndexPath()后致电userInfoCell?.nameField.becomeFirstResponder()
  7. 删除super.viewWillAppear()
  8. 中的viewWillAppear()

    这些都不适合我。

1 个答案:

答案 0 :(得分:0)

deferring becomeFirstResponder()为我解决了这个问题

dispatch_async(dispatch_get_main_queue(), {
    userInfoCell?.nameField.becomeFirstResponder()
})