আইওএস 11 - কীবোর্ড বিজ্ঞপ্তিতে কীবোর্ড উচ্চতা 0 ফিরছে


84

আমি কোনও সমস্যা ছাড়াই কীবোর্ড বিজ্ঞপ্তি ব্যবহার করছি এবং কীবোর্ডের সঠিক উচ্চতা পাচ্ছি।

- (void)keyboardDidShow:(NSNotification *) notification{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    NSLog(@"%f",keyboardSize.height);}

তবে আইওএস 11 এর সাথে নোটিফিকেশন বলা হয়ে গেলে কীবোর্ডের আকার 0 থাকে।

এই পরিস্থিতিতে ঘটতে সমস্যা কি? আমি এক্সকোড 9 বিটা 5 ব্যবহার করছি

উত্তর:


190

এটা ব্যবহার কর:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

সুইফ্টের জন্য, আপনি ব্যবহার করতে পারেন:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

4
আপনি আমার দিনটি বাঁচিয়েছেন
হেলেন ঝুকোভা

4
ধন্যবাদ, কখনই সে সম্পর্কে
আম্মার হ্যাডজিক

4
UIKeyboardFrameBeginUserInfoKey থেকে UIKeyboardFrameEndUserInfoKey এ পরিবর্তনটি কৌশলটি করেছে th
ব্যবহারকারী2408952

ধন্যবাদ, আমি অর্ধ দিন বিনিয়োগ করেছিলাম, তবে বের করতে পারিনি। আমার অর্ধেক দিন বাঁচানোর জন্য ধন্যবাদ
মনীশ নাহার

@ অক্ষয় প্রাসঙ্গিক স্ক্রিনের সীমানায় কীবোর্ডের কেবল স্টার্টফ্রেম এবং এন্ডফ্রেম।
s.zainulabideen

102

প্রতিস্থাপন UIKeyboardFrameBeginUserInfoKey

সঙ্গে

UIKeyboardFrameEndUserInfoKey

নীচে অ্যাপল ডক্স থেকে প্রাপ্ত।

UIKeyboardFrameBeginUserInfoKey- স্ক্রিনের স্থানাঙ্কগুলিতে কীবোর্ডের প্রারম্ভিক ফ্রেম চিহ্নিত করে এমন একটি সিজিআরেক্টযুক্ত এনএসভ্যালু অবজেক্টের জন্য কী।

UIKeyboardFrameEndUserInfoKey - স্ক্রিনের স্থানাঙ্কগুলিতে কীবোর্ডের শেষ ফ্রেম চিহ্নিত করে এমন একটি সিজিআরেক্ট রয়েছে এমন এনএসওয়ালু বস্তুর জন্য কী The


13
অ্যাপলকে তখন তাদের উদাহরণ কোডটি আপডেট করতে হবে, কারণ এটি আইওএস ১১-তে আর কাজ করে না Apple অ্যাপল ডক্স থেকেও, যেখানে তারা ইউআইকিএবোর্ড ফ্রেমবেগিন ইউজারইনফোকি ব্যবহার করে: বিকাশকারী.অ্যাপল.
ওয়াইল্ডক্যাট १२

আমার সমস্যার সমাধান! পরামর্শের জন্য ধন্যবাদ!
আর্নি

কেউ কি আমাকে ব্যাখ্যা করতে পারেন যে আমি 5 বছর বয়সের এই দুজনের মধ্যে পার্থক্য কী এবং যখন ইউআইএসক্রোলভিউটি স্বয়ংক্রিয়ভাবে স্ক্রোল করার বিষয়টি আসে তখন এটি কেন একটি পার্থক্য করে? আমি সত্যিই প্রশংসা করব। ধন্যবাদ!
মারিও

নামপ্যাড সহ কোনও পাঠ্যক্ষেত্রে আলতো চাপার পরে এটি কাজ করছে না। যদি নামপ্যাডের পরে আমি সাধারণ পাঠ্যক্ষেত্রটিতে ট্যাপ করি, কীবোর্ডটি আর আপ হয় না এবং যখন এটি ভিউ খারিজ করে দেয়
জ্যাক ড্যানিয়েল

7

এটা চেষ্টা কর:

UIKeyboardFrameBeginUserInfoKeyসঙ্গে প্রতিস্থাপনUIKeyboardFrameEndUserInfoKey


4
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];পদ্ধতি কীবোর্ড উইলচেঞ্জফ্রেম: একবারে চালানো হয় না, সম্ভবত দু'বার বা আরও বেশি কিছু হতে পারে someএখন কিছু কি-বোর্ডের উপরে বিশেষ সরঞ্জামদণ্ড থাকে, পদ্ধতিটি এই সময়ে অনেকবার চলবে o সুতরাং, আপনাকে UIKeyboardFrameBeginUserInfoKey এর সাথে UIKeyboardFrameEndUserInfoKey এর চূড়ান্ত ফ্রেমটি পেতে যেতে হবে কীবোর্ড
সলিনলিউ

5

এক্সকোড সংস্করণ 9.0 (9A235) ব্যবহার করে আমার অনুরূপ সমস্যা হয়েছিল; যদিও আমি সুইফট ব্যবহার করছিলাম। আমার কীবোর্ড উইলশো পদ্ধতিতে আমি নিম্নলিখিতটি লিখেছি:

if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {

    let heightValue = keyboardSize.height    

    ...
}

আশ্চর্যের বিষয় হল, প্রথমবারের কীবোর্ড উইলশোকে ডাকা হয়েছিল, উচ্চতাওয়ালু 216.0 ছিল, কিন্তু পরবর্তী কলগুলির সময় এটি 0 হয়ে গিয়েছিল! সম্ভবত এটি একটি এক্সকোড বাগ।

আমি UIKeyboardFrameBeginUserInfoKey কে একটি UIKeyboardFrameEndUserInfoKey এর সাথে প্রতিস্থাপন করেছি এবং এটি আমার জন্য সমস্যাটি স্থির করেছে।


4
আমি একই জিনিস লক্ষ্য। এটি কেবল কীবোর্ডের প্রথমবারের মধ্যে প্রদর্শিত হবে বলে মনে হয়। অতিরিক্ত ভিউ কন্ট্রোলারগুলির কীবোর্ডগুলি এই ভিউ কন্ট্রোলারের জন্য প্রথমবারের মতো উচ্চতা 0 হিসাবে প্রদর্শন করেছিল reported
jackofallcode

5

এই সমস্যাটি আইওএস 11 এ ঘটছে।

প্রতিস্থাপন

"UIKeyboardFrameEserUnIfoKey" সহ "UIKeyboardFrameBeginUserInfoKey"

নীচে প্রদর্শিত সমস্যা সমাধান করবে

উদ্দেশ্য-সি কোড:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

সুইফট ২.৩:

let keyboardSize = (NfnPsgVar.userInfo![UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue().size

সুইফট 3:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

3

নীচের কোডটি ব্যবহার করে কীবোর্ডের উচ্চতা গণনা করুন।

এটি নিরাপদ অঞ্চল এবং নিরাপদ অঞ্চল ডিভাইসগুলির সাথে উভয় ডিভাইসের জন্য কাজ করছে।

কোড:

@objc func keyboardWillShow(notification: Notification) {
    guard let keyboardFrame = notification.userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
            return
        }    
    let keyboardHeight: CGFloat                    
    if #available(iOS 11.0, *) {
       let window = UIApplication.shared.keyWindow
       let bottomPadding = window?.safeAreaInsets.bottom ?? 0.0
       keyboardHeight = keyboardFrame.cgRectValue.height - bottomPadding
    } else {
       keyboardHeight = keyboardFrame.cgRectValue.height
    }
}

2

আপনার দৃষ্টিভঙ্গি ফ্রেমের উচ্চতাটি প্রদর্শিত হওয়ার আগেই তা পাওয়ার চেষ্টা করছে এবং সে কারণেই এটি 0 হওয়া উচিত যা আমি নিশ্চিত নই কেন এটি প্রথম চেষ্টা করা হয়নি! কীভাবে কীবোর্ডের উচ্চতাটি 4.2-তে দ্রুতগতিতে পাওয়া যায় তার একটি উদাহরণ এখানে রয়েছে:

func keyboardWillShow(notification: Notification) {

    guard let userInfo = notification.userInfo else { return }

    guard var keyboardFrame: CGRect = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }

    keyboardFrame = view.convert(keyboardFrame, from: nil)

    let keyboardHeight = keyboardFrame.height
}

এটি কীবোর্ড প্রদর্শিত হওয়ার আগে সঠিকভাবে কীবোর্ড ফ্রেম বৈশিষ্ট্য সরবরাহ করবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.