ความสูงในแนวตั้งและความสูงในแนวนอนวัดเป็นจุด
ความสูงในแนวตั้งและความสูงในแนวนอนวัดเป็นจุด
คำตอบ:
ฉันใช้แนวทางต่อไปนี้ในการกำหนดกรอบของแป้นพิมพ์ใน iOS 7.1
ในวิธีการเริ่มต้นของตัวควบคุมมุมมองของฉันฉันลงทะเบียนสำหรับUIKeyboardDidShowNotification
:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
จากนั้นฉันใช้รหัสต่อไปนี้keyboardOnScreen:
เพื่อเข้าถึงเฟรมของแป้นพิมพ์ รหัสนี้ได้รับuserInfo
พจนานุกรมจากการแจ้งเตือนแล้วเข้าถึงที่เกี่ยวข้องกับNSValue
UIKeyboardFrameEndUserInfoKey
จากนั้นคุณสามารถเข้าถึง CGRect และแปลงเป็นพิกัดของมุมมองของตัวควบคุมมุมมองของคุณ จากตรงนั้นคุณสามารถทำการคำนวณใด ๆ ที่คุณต้องการตามกรอบนั้น
-(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));
}
รวดเร็ว
และการใช้งานที่เทียบเท่ากับ Swift:
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)")
}
โปรดจำไว้ว่าเมื่อใช้ iOS 8 ขนาดของแป้นพิมพ์บนหน้าจออาจแตกต่างกันไป อย่าคิดว่าแป้นพิมพ์บนหน้าจอจะมองเห็นได้ตลอดเวลา (โดยมีความสูงเฉพาะ ) หรือมองไม่เห็น
ตอนนี้ด้วย iOS 8 ผู้ใช้ยังสามารถรูดเปิดและปิดพื้นที่การคาดเดาข้อความได้ ... และเมื่อทำเช่นนี้ก็จะเริ่มต้นkeyboardWillShow
เหตุการณ์ของแอปอีกครั้งอีกครั้ง
สิ่งนี้จะทำลายตัวอย่างรหัสเดิมจำนวนมากซึ่งแนะนำให้เขียนkeyboardWillShow
เหตุการณ์ซึ่งเป็นเพียงการวัดความสูงปัจจุบันของแป้นพิมพ์บนหน้าจอและเลื่อนการควบคุมของคุณขึ้นหรือลงบนหน้าตามจำนวนนี้ (ค่าสัมบูรณ์)
กล่าวอีกนัยหนึ่งคือหากคุณเห็นโค้ดตัวอย่างซึ่งบอกให้คุณเพิ่มไฟล์ keyboardWillShow
เหตุการณ์ให้วัดความสูงของแป้นพิมพ์จากนั้นปรับขนาดความสูงของตัวควบคุมตามจำนวนนี้สิ่งนี้จะใช้ไม่ได้อีกต่อไป
ในตัวอย่างของฉันข้างต้นฉันใช้โค้ดตัวอย่างจากไซต์ต่อไปนี้ซึ่งทำให้เคลื่อนไหวตามข้อ จำกัด แนวตั้ง constant
ค่า
ในแอปของฉันฉันได้เพิ่มข้อ จำกัด ในไฟล์ UITextView
โดยตั้งค่าที่ด้านล่างของหน้าจอ เมื่อหน้าจอปรากฏขึ้นครั้งแรกฉันจัดเก็บระยะทางแนวตั้งเริ่มต้นนี้
จากนั้นเมื่อใดก็ตามที่keyboardWillShow
กิจกรรมของฉันเริ่มต้นฉันจะเพิ่มความสูงของแป้นพิมพ์ (ใหม่) ให้กับค่าข้อ จำกัด เดิมนี้ (ดังนั้นข้อ จำกัดจะปรับขนาดความสูงของตัวควบคุม)
ใช่. มันน่าเกลียด.
และฉันรู้สึกรำคาญ / แปลกใจเล็กน้อยที่ AutoLayout ที่เจ็บปวดอย่างน่าสยดสยองของ XCode 6 ไม่เพียง แต่อนุญาตให้เราแนบปุ่มควบคุมที่ด้านล่างของหน้าจอหรือด้านบนของแป้นพิมพ์บนหน้าจอ
บางทีฉันอาจจะขาดอะไรไป
นอกเหนือจากความมีสติของฉัน
ความสูงของแป้นพิมพ์คือ 216 พอยต์สำหรับโหมดแนวตั้งและ 162 แต้มสำหรับโหมดแนวนอน
หมายเหตุเวอร์ชัน: ค่านี้ไม่มีค่าใน iOS 9 และ 10 อีกต่อไปเนื่องจากรองรับขนาดแป้นพิมพ์ที่กำหนดเอง
ขึ้นอยู่กับรุ่นและแถบ QuickType:
ความสูงของแป้นพิมพ์ขึ้นอยู่กับรุ่นแถบ QuickType การตั้งค่าของผู้ใช้ ... แนวทางที่ดีที่สุดคือคำนวณแบบดินามิก:
Swift 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
}
}
ฉันไม่พบคำตอบล่าสุดดังนั้นฉันจึงตรวจสอบทั้งหมดด้วยโปรแกรมจำลอง (iOS 11.0)
อุปกรณ์ | ความสูงของหน้าจอ | แนวตั้ง | ภูมิทัศน์
iPhone 4s | 480.0 | 216.0 | 162.0
iPhone 5, iPhone 5s, iPhone SE | 568.0 | 216.0 | 162.0
iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667.0 | 216.0 | 162.0
iPhone 6 plus, iPhone 7 plus, iPhone 8 plus | 736.0 | 226.0 | 162.0
iPad รุ่นที่ 5, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0
ขอบคุณ!
iPhone
แป้นพิมพ์ขนาด:
2.6S, 6,7,8: (375 × 667): keyboardSize = (0.0, 407.0, 375.0, 260.
3.6 +, 6S +, 7+, 8+: (414 × 736) keyboardSize = (0.0, 465.0, 414.0, 271.0)
4. XS, X: (375 X 812) keyboardSize = (0.0, 477.0, 375.0, 335.0)
5. แป้นพิมพ์ XR, XSMAX ((414 x 896) ขนาด = (0.0, 550.0, 414.0, 346.0)
ฉันสร้างตารางนี้ซึ่งมีทั้งความสูงของแป้นพิมพ์ iPhone และ iPad ทั้งสำหรับโหมดแนวนอนและแนวตั้งทั้งที่แถบเครื่องมือเปิดและปิด
ฉันยังอธิบายวิธีการที่คุณสามารถใช้ขนาดนี้ในรหัสของคุณที่นี่
โปรดทราบว่าคุณควรใช้มิติข้อมูลเหล่านี้เฉพาะในกรณีที่คุณต้องการทราบมิติของแป้นพิมพ์ก่อนที่จะจัดวางมุมมอง มิฉะนั้นคำตอบจากคำตอบอื่น ๆ จะทำงานได้ดีกว่า