शामिल करने के लिए आईओएस 11 सुरक्षित क्षेत्र बढ़ाएं आईओएस 11 में पेश की गई नई सुरक्षित क्षेत्र लेआउट मार्गदर्शिका सामग्री को नीचे बार प्रदर्शित करने से रोकने के लिए बहुत अच्छा काम करती है, लेकिन इसमें कीबोर्ड शामिल नहीं है। इसका मतलब है कि जब एक कीबोर्ड प्रदर्शित होता है, तो सामग्री अभी भी इसके पीछे छिपी हुई है और यही वह समस्या है जिसे मैं हल करने की कोशिश कर रहा हूं।कुंजीपटल
मेरा दृष्टिकोण कुंजीपटल अधिसूचनाओं को सुनने और फिर additionalSafeAreaInsets
के माध्यम से सुरक्षित क्षेत्र को समायोजित करने पर आधारित है।
override func viewDidLoad() {
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
notificationCenter.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
notificationCenter.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
}
//MARK: - Keyboard
extension MyViewController {
@objc func keyboardWillShow(notification: NSNotification) {
let userInfo = notification.userInfo!
let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.height
additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardHeight, right: 0)
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded();
}
}
@objc func keyboardWillHide(notification: NSNotification) {
additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded();
}
}
@objc func keyboardWillChange(notification: NSNotification) {
let userInfo = notification.userInfo!
let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.height
additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardHeight, right: 0)
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded();
}
}
}
यह अच्छी तरह से काम करता है के रूप में MyController
एक UITableView
कि पूरे सुरक्षित क्षेत्र के माध्यम से फैली हुई है के साथ एक UIViewController
है:
यहाँ मेरी कोड है। अब जब कीबोर्ड प्रकट होता है, तो नीचे धक्का दिया जाता है ताकि कीबोर्ड के पीछे कोई भी कक्ष न हो।
समस्या नीचे सलाखों के साथ है। मेरे पास नीचे एक टूलबार भी है जो पहले से ही सुरक्षित क्षेत्र में शामिल है। इसलिए, पूर्ण कुंजीपटल ऊंचाई को अतिरिक्त सुरक्षित क्षेत्र इन्सेट के रूप में सेट करना तालिका के नीचे धक्का देता है, जो नीचे की बार की ऊंचाई से बहुत अधिक दिखाई देता है। अच्छी तरह से काम करने के लिए इस विधि के लिए, मुझे additionalSafeAreaInsets.bottom
को कीबोर्ड बार के बराबर होने के लिए नीचे बार की ऊंचाई से कम करना होगा।
प्रश्न 1: नीचे सुरक्षित सुरक्षित क्षेत्र अंतर प्राप्त करने का सबसे अच्छा तरीका क्या है? मैन्युअल रूप से टूलबार का फ्रेम प्राप्त करें और इसकी ऊंचाई का उपयोग करें? या क्या सुरक्षित क्षेत्र लेआउट गाइड से सीधे अंतर प्राप्त करना संभव है?
प्रश्न 2: संभावित रूप से कीबोर्ड बार बदलने के आकार के बिना आकार को बदलने के लिए संभव होना चाहिए, इसलिए मुझे बार के फ्रेम में बदलने के लिए कुछ विधि को भी लागू करना चाहिए। क्या यह viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
में किया गया है? या कहीं और?
धन्यवाद
आईफोनएक्स से निपटने के लिए यह एक बेहतर समाधान है, क्योंकि इसकी ऊंचाई में शामिल हैं सुरक्षित क्षेत्र के बाहर –
... लेकिन दुर्भाग्यवश यह सुरक्षित एरियालाउआउटगाइड का उपयोग करता है, जो आईओएस 11-केवल है और मुझे आईओएस 9 –
पर समर्थन करने की आवश्यकता है क्या आपको इस और आईफोन एक्स के साथ कोई समस्या नहीं है? कीबोर्ड की वाई स्थिति, जब आईफोन एक्स पर दिखाया गया है, वास्तविक स्क्रीन की तुलना में थोड़ा अधिक लगता है। – Jonny