I am desperately trying to figure this out, I've spent all day on it with no luck. All I want to do is have a list of textfields that a user can click on and it will place the keyboard on the page so that A) the field is not blocked and (I have figured that part out) and B) the top of the view is not cut off when the keyboard pops up. This is what I have so far (https://i.stack.imgur.com/0qC0h.jpg), but you can clearly see the problem ~ that's the top of the view I cannot scroll up any farther. I've attempted to bury the whole thing in a scrollview and then change the contentsize of the scrollview but that has done nothing. Any help would be appreciated. Thank you. (I am trying to do this in swift 3).
class ViewController4: UIViewController,  UITextFieldDelegate {
    var dataState: Data?
    @IBOutlet weak var UserNameLabel: UILabel!
    @IBOutlet weak var TextField1Outlet: UITextField!
    @IBOutlet weak var TextField2Outlet: UITextField!
    @IBOutlet weak var TextField3Outlet: UITextField!
    @IBOutlet weak var TextField4Outlet: UITextField!
    @IBOutlet weak var TextField5Outlet: UITextField!
    @IBOutlet var ViewFrame: UIView!
    @IBOutlet weak var scrollView: UIScrollView!
    @IBAction func TextField1Action(_ sender: Any) {
    }
    @IBAction func TextField2Action(_ sender: Any) {
    }
    @IBAction func TextField3Action(_ sender: Any) {
    }
    @IBAction func TextField4Action(_ sender: Any) {
    }
    @IBAction func TextField5Action(_ sender: Any) {
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        UserNameLabel.text = dataState?.LoginName
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destinationViewController = segue.destination as? ViewController1 {
            destinationViewController.dataState = dataState
        }
    }
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
        scrollView.delegate = self as? UIScrollViewDelegate
        TextField1Outlet.returnKeyType = UIReturnKeyType.done
        TextField1Outlet.delegate = self
        TextField2Outlet.returnKeyType = UIReturnKeyType.done
        TextField2Outlet.delegate = self
        TextField3Outlet.returnKeyType = UIReturnKeyType.done
        TextField3Outlet.delegate = self
        TextField4Outlet.returnKeyType = UIReturnKeyType.done
        TextField4Outlet.delegate = self
        TextField5Outlet.returnKeyType = UIReturnKeyType.done
        TextField5Outlet.delegate = self
        NotificationCenter.default.addObserver(self, selector: #selector(ViewController4.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(ViewController4.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    }
    func keyboardWillShow(notification: NSNotification) {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            if self.view.frame.origin.y == 0{
                self.view.frame.origin.y -= keyboardSize.height
                let newHeight = self.view.frame.height + keyboardSize.height
                scrollView.contentSize = CGSize(width: self.view.frame.width, height: newHeight)
            }
        }
    }
    func keyboardWillHide(notification: NSNotification) {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            if self.view.frame.origin.y != 0{
                self.view.frame.origin.y += keyboardSize.height
                scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
            }
        }
    }
}
 
     
    