2016-08-21 8 views
15

जब मैं पर कीबोर्ड पॉप अप करता हूं तो मैं दृश्य को स्थानांतरित करने की कोशिश कर रहा हूं जो UIScrollView पर रखा गया है। मैं इसके लिए UIKeyboardWillShowNotification और UIKeyboardWillHideNotification का उपयोग कर रहा हूं।आईओएस "गबोर्ड" ऐप, UIKeyboard अधिसूचना ऊंचाई गलत या अमान्य है

iOS Keyboard का उपयोग करते समय यह पूरी तरह से काम कर रहा है जहां मुझे ऊंचाई 297 मिल रही है।

मेरा ग्राहक Gboard keyboard का उपयोग कर रहा है, उसने शिकायत की कि दृश्य आगे नहीं बढ़ रहा है। जब मैंने परीक्षण किया, तो मुझे कीबोर्ड की ऊंचाई 44 के रूप में मिल रही है।

मैंने NSNotifiction userInfo ऑब्जेक्ट के लिए UIKeyboardFrameBeginUserInfoKey और UIKeyboardFrameEndUserInfoKey दोनों की कोशिश की है। दोनों केवल 44 दे रहे हैं।

मैंने UIKeyboardDidShowNotification और UIKeyboardDidHideNotification के साथ भी कोशिश की, अभी भी एक ही समस्या है।

क्या कोई इस पर मेरी सहायता कर सकता है ..?

+1

इस पोस्ट पर एक नज़र डालें: https://stackoverflow.com/questions/28813339/move-a-view-up-only-when-the- कीबोर्ड-कवर-ए-इनपुट-फ़ील्ड/32555911 # 32555911 यह –

+0

@ एमआरएच की मदद कर सकता है, लिंक के लिए धन्यवाद:) ... मैंने कोशिश की है, लेकिन यह 'UITableview' के साथ काम नहीं कर रहा है। मेरे पास 'UIScrollView' और 'UITableView' – arthankamal

+0

दोनों हैं, ऊपर दिए गए प्रश्न में कीबोर्ड ऊंचाई प्राप्त करने के लिए कोड शामिल करें – iMHitesh

उत्तर

-1

कोई जवाब नहीं, लेकिन केवल यहां बी/सी टिप्पणी में पेस्ट करने के लिए बहुत लंबा है। यहाँ कीबोर्ड ऊंचाई प्राप्त करने के लिए अपना कोड @iMHitesh है:

class KeyboardShiftAnimator { 

    fileprivate let showAnimation: (_ keyboardHeight: CGFloat) -> Void 
    fileprivate let hideAnimation: (Void) -> Void 
    fileprivate weak var ownerController: UIViewController! 
    fileprivate let disableAnimations: Bool 

    deinit { 
     NotificationCenter.default.removeObserver(self) 
    } 

    init(ownerController: UIViewController, disableAnimations: Bool = false, showAnimation: @escaping (_ keyboardHeight: CGFloat) -> Void, hideAnimation: @escaping (Void) -> Void) { 
     self.showAnimation = showAnimation 
     self.hideAnimation = hideAnimation 
     self.ownerController = ownerController 
     self.disableAnimations = disableAnimations 

     NotificationCenter.default.addObserver(
      self, 
      selector: 
#selector(KeyboardShiftAnimator.keyboardWillShow(_:)), 
      name: NSNotification.Name.UIKeyboardWillShow, 
      object: nil 
     ) 
     NotificationCenter.default.addObserver(
      self, 
      selector: 
#selector(KeyboardShiftAnimator.keyboardWillHide(_:)), 
      name: NSNotification.Name.UIKeyboardWillHide, 
      object: nil 
     ) 
    } 

    func makeAppropriateLayout(_ duration: NSNumber) { 
     if self.disableAnimations { 
      UIView.performWithoutAnimation({ 
       self.ownerController.view.setNeedsUpdateConstraints() 
       self.ownerController.view.updateConstraintsIfNeeded() 
       self.ownerController.view.layoutIfNeeded() 
      }) 
     } else { 
      self.ownerController.view.setNeedsUpdateConstraints() 
      self.ownerController.view.updateConstraintsIfNeeded() 
      UIView.animate(withDuration: duration.doubleValue, animations: {() -> Void in 
       self.ownerController.view.layoutIfNeeded() 
      }) 
     } 
    } 

    @objc func keyboardWillShow(_ note: Foundation.Notification) { 
     guard let endFrameValue = (note as NSNotification).userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue, 
      let animationDuration = (note as NSNotification).userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber 
      else { return } 

     let keyboardHeight = endFrameValue.cgRectValue.size.height 

     showAnimation(keyboardHeight) 

     makeAppropriateLayout(animationDuration) 
    } 

    @objc func keyboardWillHide(_ note: Foundation.Notification) { 
     let animationDuration = (note as NSNotification).userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber 
     let duration = animationDuration != nil ? animationDuration!.doubleValue : 0.25 

     hideAnimation() 

     makeAppropriateLayout(NSNumber(value: duration)) 
    } 
} 
संबंधित मुद्दे