इस थ्रेड पर लोकप्रिय उत्तरों में से एक निम्नलिखित कोड का उपयोग करता है:
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)
}