หนึ่งในคำตอบที่ได้รับความนิยมในหัวข้อนี้ใช้รหัสต่อไปนี้: 
func keyboardWillShow(sender: NSNotification) {
    self.view.frame.origin.y -= 150
}
func keyboardWillHide(sender: NSNotification) {
    self.view.frame.origin.y += 150
}
มีปัญหาที่ชัดเจนเกี่ยวกับการชดเชยมุมมองของคุณด้วยจำนวนคงที่ มันจะดูดีในอุปกรณ์หนึ่ง แต่จะดูไม่ดีกับการกำหนดค่าขนาดอื่น คุณจะต้องได้รับความสูงของแป้นพิมพ์และใช้เป็นค่าชดเชยของคุณ
นี่คือวิธีการแก้ปัญหาที่ทำงานบนอุปกรณ์ทั้งหมดและจัดการกับตัวพิมพ์เล็ก - ใหญ่ที่ผู้ใช้ซ่อนฟิลด์ข้อความคาดเดาขณะพิมพ์
สารละลาย
สิ่งสำคัญที่ควรทราบด้านล่างนี้คือสิ่งที่เรากำลังส่งผ่าน self.view.window เป็นพารามิเตอร์วัตถุของเรา สิ่งนี้จะให้ข้อมูลจากคีย์บอร์ดของเราเช่นความสูงของมัน!
@IBOutlet weak var messageField: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: self.view.window)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: self.view.window)
}
func keyboardWillHide(sender: NSNotification) {
    let userInfo: [NSObject : AnyObject] = sender.userInfo!
    let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
    self.view.frame.origin.y += keyboardSize.height
}
เราจะทำให้มันดูดีในทุกอุปกรณ์และจัดการกับกรณีที่ผู้ใช้เพิ่มหรือลบฟิลด์ข้อความคาดการณ์
func keyboardWillShow(sender: NSNotification) {
    let userInfo: [NSObject : AnyObject] = sender.userInfo!
    let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
    let offset: CGSize = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue.size
    if keyboardSize.height == offset.height {
        UIView.animateWithDuration(0.1, animations: { () -> Void in
            self.view.frame.origin.y -= keyboardSize.height
        })
    } else {
        UIView.animateWithDuration(0.1, animations: { () -> Void in
            self.view.frame.origin.y += keyboardSize.height - offset.height
        })
    }
}
ลบผู้สังเกตการณ์
อย่าลืมลบผู้สังเกตการณ์ก่อนที่จะออกจากมุมมองเพื่อป้องกันไม่ให้มีการส่งข้อความที่ไม่จำเป็น
override func viewWillDisappear(animated: Bool) {
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: self.view.window)
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: self.view.window)
}
อัปเดตตามคำถามจากความคิดเห็น:
หากคุณมีฟิลด์ข้อความอย่างน้อยสองฟิลด์คุณสามารถตรวจสอบเพื่อดูว่า view.frame.origin.y ของคุณอยู่ที่ศูนย์หรือไม่ 
func keyboardWillShow(sender: NSNotification) {
    let userInfo: [NSObject : AnyObject] = sender.userInfo!
    let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
    let offset: CGSize = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue.size
    if keyboardSize.height == offset.height {
        if self.view.frame.origin.y == 0 {
            UIView.animateWithDuration(0.1, animations: { () -> Void in
                self.view.frame.origin.y -= keyboardSize.height
            })
        }
    } else {
        UIView.animateWithDuration(0.1, animations: { () -> Void in
            self.view.frame.origin.y += keyboardSize.height - offset.height
        })
    }
     print(self.view.frame.origin.y)
}