প্রতিকৃতিতে উচ্চতা এবং ল্যান্ডস্কেপের উচ্চতা পয়েন্টগুলিতে পরিমাপ করা হয়।
প্রতিকৃতিতে উচ্চতা এবং ল্যান্ডস্কেপের উচ্চতা পয়েন্টগুলিতে পরিমাপ করা হয়।
উত্তর:
আমি আইওএস 7.1 তে কীবোর্ডের ফ্রেম নির্ধারণের জন্য নিম্নলিখিত পদ্ধতিটি ব্যবহার করেছি।
আমার দর্শন নিয়ন্ত্রকের আরআর পদ্ধতিতে, আমি নিবন্ধভুক্ত করেছি UIKeyboardDidShowNotification
:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
তারপরে, আমি keyboardOnScreen:
কীবোর্ডের ফ্রেমে অ্যাক্সেস পেতে নিম্নলিখিত কোডটি ব্যবহার করেছি । এই কোড পায় userInfo
বিজ্ঞপ্তি থেকে অভিধান এবং তারপর ব্যবহারের NSValue
সঙ্গে যুক্ত UIKeyboardFrameEndUserInfoKey
। এরপরে আপনি সিজিআরেক্ট অ্যাক্সেস করতে পারেন এবং এটিকে আপনার ভিউ কন্ট্রোলারের দৃশ্যের স্থানাঙ্কে রূপান্তর করতে পারেন। সেখান থেকে, সেই ফ্রেমের উপর ভিত্তি করে আপনার যে কোনও গণনা প্রয়োজন perform
-(void)keyboardOnScreen:(NSNotification *)notification
{
NSDictionary *info = notification.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];
NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
}
সুইফট
এবং সুইফটের সাথে সমতুল্য প্রয়োগ:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
@objc
func keyboardDidShow(notification: Notification) {
guard let info = notification.userInfo else { return }
guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardFrame = frameInfo.cgRectValue
print("keyboardFrame: \(keyboardFrame)")
}
মনে রাখবেন যে, আইওএস 8 এর সাথে, অনস্ক্রিন কীবোর্ডের আকারটি বিভিন্ন রকম হতে পারে। অনুমান করবেন না যে অনস্ক্রিন কীবোর্ড সর্বদা দৃশ্যমান হবে ( নির্দিষ্ট উচ্চতার সাথে) বা অদৃশ্য।
এখন, আইওএস 8 এর সাহায্যে ব্যবহারকারী পাঠ্য-পূর্বাভাসের অঞ্চলটি চালু এবং বন্ধও সোয়াইপ করতে পারে ... এবং যখন তারা এটি করে, এটি আবার কোনও অ্যাপ্লিকেশানের keyboardWillShow
ইভেন্টটিকে সরিয়ে দেয় ।
এটি প্রচুর লিগ্যাসি কোডের নমুনাগুলি ভেঙে দেবে , যা কোনও keyboardWillShow
ইভেন্ট লেখার সুপারিশ করেছিল , যা কেবলমাত্র অনস্ক্রিন কীবোর্ডের বর্তমান উচ্চতা পরিমাপ করে এবং আপনার নিয়ন্ত্রণগুলি এই (পরম) পরিমাণে পৃষ্ঠায় উপরে বা নীচে স্থানান্তরিত করে।
অন্য কথায়, যদি আপনি এমন কোনও নমুনা কোড দেখতে পান যা কেবল আপনাকে একটি keyboardWillShow
ইভেন্ট যুক্ত করতে বলে , কীবোর্ডের উচ্চতা পরিমাপ করে, তারপরে আপনার নিয়ন্ত্রণের উচ্চতাগুলিকে এই পরিমাণের সাথে আকার দিন, এটি আর সবসময় কাজ করবে না।
উপরের আমার উদাহরণে, আমি নিম্নলিখিত সাইট থেকে নমুনা কোড ব্যবহার করেছি, যা উল্লম্ব সীমাবদ্ধতার constant
মানটিকে অ্যানিমিট করে ।
আমার অ্যাপ্লিকেশনটিতে, আমি আমার প্রতিবন্ধকতা যুক্ত করেছি UITextView
, স্ক্রিনের নীচে সেট করে। যখন স্ক্রিনটি প্রথম প্রদর্শিত হয়েছিল, আমি এই প্রাথমিক উল্লম্ব দূরত্বটি সংরক্ষণ করেছি।
তারপর, যখনই আমার keyboardWillShow
ঘটনা বন্ধ লাথি পরার, আমি যোগ (নতুন) কীবোর্ডের উচ্চতা এই মূল বাধ্যতা মান (তাই বাধ্যতা নিয়ন্ত্রণ উচ্চতা পরিবর্তন করা)।
হ্যাঁ এটা কুৎসিত.
এবং আমি কিছুটা বিরক্ত / বিস্মিত হয়েছি যে এক্সকোড 6 এর ভয়াবহ-বেদনাদায়ক অটোলআউটটি কেবল আমাদের স্ক্রিনের নীচে বা অনস্ক্রিন কীবোর্ডের শীর্ষে নিয়ন্ত্রণের বোতলগুলিকে সংযুক্ত করতে দেয় না।
সম্ভবত আমি কিছু মিস করছি।
আমার বিচক্ষণতা ছাড়া অন্য।
পোর্ট্রেট মোডের জন্য কীবোর্ডের উচ্চতা 216pts এবং ল্যান্ডস্কেপ মোডের জন্য 162pts।
সংস্করণ দ্রষ্টব্য: কাস্টম কীবোর্ড আকারগুলি সমর্থন করার কারণে এটি iOS 9 এবং 10 তে আর মূল্য হবে না।
এটি মডেল এবং কুইকটাইপ বারের উপর নির্ভর করে:
কীবোর্ডের উচ্চতা মডেল, কুইকটাইপ বার, ব্যবহারকারীর সেটিংসের উপর নির্ভর করে ... সর্বোত্তম পদ্ধতির ডায়নামিকভাবে গণনা করা হয়:
সুইফট 3.0
var heightKeyboard : CGFloat?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
}
func keyboardShown(notification: NSNotification) {
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue {
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
// Now is stored in your heightKeyboard variable
}
}
আমি সর্বশেষ উত্তর খুঁজে পাচ্ছি না, তাই আমি সিমুলেটর দিয়ে এটি সমস্ত পরীক্ষা করি ((আইওএস 11.0)
ডিভাইস | পর্দার উচ্চতা | প্রতিকৃতি | ল্যান্ডস্কেপ
আইফোন 4 এস | 480.0 | 216.0 | 162.0
আইফোন 5, আইফোন 5 এস, আইফোন এসই | 568.0 | 216.0 | 162.0
আইফোন 6, আইফোন 6 এস, আইফোন 7, আইফোন 8, আইফোন এক্স | 667.0 | 216.0 | 162.0
আইফোন 6 প্লাস, আইফোন 7 প্লাস, আইফোন 8 প্লাস | 736.0 | 226.0 | 162.0
আইপ্যাড 5 ম প্রজন্ম, আইপ্যাড এয়ার, আইপ্যাড এয়ার 2, আইপ্যাড প্রো 9.7, আইপ্যাড প্রো 10.5, আইপ্যাড প্রো 12.9 | 1024.0 | 265.0 | 353.0
ধন্যবাদ!
আইফোন
কীবোর্ড আকার:
2.6 এস, 6,7,8: (375 × 667): কীবোর্ডসাইজ = (0.0, 407.0, 375.0, 260)।
3.6 +, 6 এস +, 7+, 8+: (414 × 736) কীবোর্ড সাইজ = (0.0, 465.0, 414.0, 271.0)
4.XS, এক্স: (375 এক্স 812) কীবোর্ড সাইজ = (0.0, 477.0, 375.0, 335.0)
5.এক্সআর, এক্সএসএমএক্স ((414 x 896) কীবোর্ড সাইজ = (0.0, 550.0, 414.0, 346.0)
আমি এই টেবিলটি তৈরি করেছি যার মধ্যে আইফোন এবং আইপ্যাড কীবোর্ডের উভয় উচ্চতা রয়েছে, ল্যান্ডস্কেপ এবং প্রতিকৃতি মোডের জন্য, উভয়ই সরঞ্জামদণ্ডটি চালু এবং বন্ধ রয়েছে।
আমি এমনকি কিভাবে আপনি আপনার কোডে এই মাত্রা ব্যবহার করতে পারেন ব্যাখ্যা এখানে ।
মনে রাখবেন যে ভিউটি বিন্যাস করার আগে আপনার যদি কীবোর্ডের মাত্রা জানতে প্রয়োজন তবেই এই মাত্রাগুলি ব্যবহার করা উচিত। অন্যথায় অন্যান্য উত্তরগুলির সমাধানগুলি আরও ভাল কাজ করে।