UITableViewController not scrolling view when keyboard appears

前端 未结 4 1631
南旧
南旧 2020-12-14 10:17

I have a UITableViewController with around 20 static cells, some of these cells have UITextFields within them and some are just for selecting with

4条回答
  •  猫巷女王i
    2020-12-14 10:56

    If the auto scroll of UITableViewController doesn't work with the UITextFields in cells or scroll weirdly, do these steps. Swift 5 iOS 13.2 tested 100%

    First implement viewWillAppear but don't call super.viewWillAppear (this will stop auto scroll)

    override func viewWillAppear(_ animated: Bool) {
    
    }
    

    Then let's do the scroll manually.

    override func viewWillAppear(_ animated: Bool) {
    
      //Notification center observers
      NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)),
                                                 name: UIResponder.keyboardDidShowNotification, object: nil)
      NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)),
                                                name: UIResponder.keyboardWillHideNotification, object: nil)
    
    }
    
    //keybord show action
    @objc func keyboardWillShow(notification: Notification) {
        tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: notification.getKeyBoardHeight, right: 0)
    }
    //keyboard hide action
    @objc func keyboardWillHide(notification: Notification) {
        tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    }
    
    extension Notification {
    
        var getKeyBoardHeight: CGFloat {
    
            let userInfo: NSDictionary = self.userInfo! as NSDictionary
            let keyboardFrame: NSValue = userInfo.value(forKey: UIResponder.keyboardFrameEndUserInfoKey) as! NSValue
            let keyboardRectangle = keyboardFrame.cgRectValue
            return keyboardRectangle.height
        }
    
    }
    
    override func viewWillDisappear(_ animated: Bool) {
       super.viewWillDisappear(animated)
       NotificationCenter.default.removeObserver(self)
    }
    

提交回复
热议问题