ความสูงของแป้นพิมพ์บนหน้าจอของ iPhone คืออะไร?


85

ความสูงในแนวตั้งและความสูงในแนวนอนวัดเป็นจุด


2
ที่นี่คุณจะพบมิติทั้งหมดของ iPhone: ขนาด iPhone
Pfitz

3
อย่าใช้ลิงก์ "มิติ iPhone" สุดท้าย! ตั้งแต่ปี 2011 ก่อนที่ iOS 8 จะเข้ามาและอนุญาตให้ความสูงของแป้นพิมพ์บนหน้าจอแตกต่างกันไป
Mike Gledhill

@MikeGledhill ความสูงของแป้นพิมพ์บนหน้าจอจะแตกต่างกันแม้กระทั่งก่อน iOS 8
ตรวจจับซ้ำ

ที่เกี่ยวข้อง: หากคุณกำลังมองหาค่าที่แท้จริงของความสูงของแป้นพิมพ์ (เช่นเพื่อวัตถุประสงค์ในการดีบัก) โปรดดูความสูงของแป้นพิมพ์ภาษาต่างประเทศของ iOS?
Senseful

คำตอบ:


212

ฉันใช้แนวทางต่อไปนี้ในการกำหนดกรอบของแป้นพิมพ์ใน 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)")
}

4
แม้ว่าจะมีส่วนเกี่ยวข้องเล็กน้อย แต่ก็ดีกว่าการเข้ารหัสขนาดแป้นพิมพ์อย่างแน่นอน คำตอบที่ถูกต้อง
13

2
โหวตคำตอบนี้และโหวตคำถาม OP ไม่รู้แน่นอนว่าเขาพูดถึงอะไร ระวังนะ! คำตอบนี้เป็นคำตอบที่ถูกต้อง!
superarts.org

2
ส่วนเติมเต็มสำหรับแนวนอน: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang

3
มีวิธีดำเนินการโดยไม่ให้แป้นพิมพ์ปรากฏขึ้นหรือไม่? ในกรณีของฉันฉันต้องการมีอะไรบางอย่างที่อยู่ด้านหลังแป้นพิมพ์ที่มีความสูงเท่ากัน (คล้ายกับว่าผู้ส่งสารมีสิ่งของ)
จอห์น

@ superarts.org ไม่จำเป็นต้องโหวตคำถาม; ผู้คนมักจะค้นหาสิ่งนี้และตอนนี้พวกเขาจะเห็นคำตอบนี้ .. ดังนั้นทุกอย่างก็ดี :)
Ja͢ck

46

โปรดจำไว้ว่าเมื่อใช้ iOS 8 ขนาดของแป้นพิมพ์บนหน้าจออาจแตกต่างกันไป อย่าคิดว่าแป้นพิมพ์บนหน้าจอจะมองเห็นได้ตลอดเวลา (โดยมีความสูงเฉพาะ ) หรือมองไม่เห็น

ตอนนี้ด้วย iOS 8 ผู้ใช้ยังสามารถรูดเปิดและปิดพื้นที่การคาดเดาข้อความได้ ... และเมื่อทำเช่นนี้ก็จะเริ่มต้นkeyboardWillShowเหตุการณ์ของแอปอีกครั้งอีกครั้ง

สิ่งนี้จะทำลายตัวอย่างรหัสเดิมจำนวนมากซึ่งแนะนำให้เขียนkeyboardWillShowเหตุการณ์ซึ่งเป็นเพียงการวัดความสูงปัจจุบันของแป้นพิมพ์บนหน้าจอและเลื่อนการควบคุมของคุณขึ้นหรือลงบนหน้าตามจำนวนนี้ (ค่าสัมบูรณ์)

ใส่คำอธิบายภาพที่นี่

กล่าวอีกนัยหนึ่งคือหากคุณเห็นโค้ดตัวอย่างซึ่งบอกให้คุณเพิ่มไฟล์ keyboardWillShowเหตุการณ์ให้วัดความสูงของแป้นพิมพ์จากนั้นปรับขนาดความสูงของตัวควบคุมตามจำนวนนี้สิ่งนี้จะใช้ไม่ได้อีกต่อไป

ในตัวอย่างของฉันข้างต้นฉันใช้โค้ดตัวอย่างจากไซต์ต่อไปนี้ซึ่งทำให้เคลื่อนไหวตามข้อ จำกัด แนวตั้ง constantค่า

ฝึก AutoLayout

ในแอปของฉันฉันได้เพิ่มข้อ จำกัด ในไฟล์ UITextViewโดยตั้งค่าที่ด้านล่างของหน้าจอ เมื่อหน้าจอปรากฏขึ้นครั้งแรกฉันจัดเก็บระยะทางแนวตั้งเริ่มต้นนี้

จากนั้นเมื่อใดก็ตามที่keyboardWillShowกิจกรรมของฉันเริ่มต้นฉันจะเพิ่มความสูงของแป้นพิมพ์ (ใหม่) ให้กับค่าข้อ จำกัด เดิมนี้ (ดังนั้นข้อ จำกัดจะปรับขนาดความสูงของตัวควบคุม)

ใส่คำอธิบายภาพที่นี่

ใช่. มันน่าเกลียด.

และฉันรู้สึกรำคาญ / แปลกใจเล็กน้อยที่ AutoLayout ที่เจ็บปวดอย่างน่าสยดสยองของ XCode 6 ไม่เพียง แต่อนุญาตให้เราแนบปุ่มควบคุมที่ด้านล่างของหน้าจอหรือด้านบนของแป้นพิมพ์บนหน้าจอ

บางทีฉันอาจจะขาดอะไรไป

นอกเหนือจากความมีสติของฉัน


จริงๆแล้วขนาดแป้นพิมพ์จะแตกต่างกันไปเสมอแม้ใน iOS เวอร์ชันเก่า เช่นตรวจลายมือภาษาจีน
ReDetection

อ๊ะไม่ได้ตระหนักถึงสิ่งนั้น ฉันเพิ่งพบว่ามันแปลกที่ตัวอย่าง "keyboardWillShow" จำนวนมากมักจะคิดว่าเหตุการณ์นี้จะถูกเรียกเพียงครั้งเดียวเมื่อแป้นพิมพ์ปรากฏขึ้นหรือหายไป .. โดยไม่มีฟังก์ชันการทำงานที่จะรับมือกับแป้นพิมพ์ที่อยู่บนหน้าจอ แต่เปลี่ยนขนาด
Mike Gledhill

1
@MikeGledhill ฉันคิดว่าคุณจะใช้ "UIKeyboardWillChangeFrameNotification" สำหรับการเปลี่ยนเฟรมเนื่องจากการหมุนหรือแสดง (/ ซ่อน) แถบการคาดคะเนข้อความ ...
Abdalrahman Shatou

ฉันเพิ่งทดสอบสิ่งนี้กับแอปของฉัน UIKeyboardWillChangeFrameNotification จะเรียก ASWELL เป็นเหตุการณ์ keyboardWillShow เสมอเมื่อใดก็ตามที่ฉันทำให้แป้นพิมพ์ปรากฏขึ้นหรือเปิดหรือปิดพื้นที่คาดคะเนข้อความ มันก็เลยไม่ค่อยช่วยอะไรมาก ประเด็นของฉันคือ ... ผู้ใช้ต้องระมัดระวังกับเหตุการณ์เหล่านี้เล็กน้อยนั่นคือทั้งหมดที่
Mike Gledhill

1
ทำไมถึงไม่ได้รับความสนใจมากขึ้น?
rfoo

31

ความสูงของแป้นพิมพ์คือ 216 พอยต์สำหรับโหมดแนวตั้งและ 162 แต้มสำหรับโหมดแนวนอน

ที่มา


136
หากคุณจะโพสต์คำถามที่ตอบเองได้อย่างน้อยก็ให้คำตอบที่เหมาะสม ขนาดของแป้นพิมพ์ควรได้รับจากออบเจ็กต์การแจ้งเตือนไม่ใช่ค่าฮาร์ดโค้ดที่นำมาจากบางเว็บไซต์ ดูที่นี่
jrturton

16
@jrturton คำถามไม่ใช่วิธีหาความสูงโดยใช้โปรแกรม คำถามนี้ไม่เพียง แต่มีประโยชน์สำหรับโปรแกรมเมอร์เท่านั้น แต่ยังรวมถึงนักออกแบบกราฟิกด้วยเช่นกัน คำตอบที่คุณถามเป็นของคำถามอื่น ในความเป็นจริงมีคำถามอื่นพร้อมคำตอบนั้น: stackoverflow.com/a/7302291/310121
Erik B

48
@ErikB ระวังนะ ขนาดแป้นพิมพ์ขึ้นอยู่กับภาษาและประเภทของแป้นพิมพ์
Gabriel

13
เพื่อประโยชน์ของคุณเองอย่าใช้ค่าฮาร์ดโค้ด! ตัวอย่างเช่นผู้ใช้อาจใช้แป้นพิมพ์แบบแยก (สองส่วน) ซึ่งไม่สนใจเรื่องความสูงมากนัก
Timo

6
คำตอบนี้ขี้เกียจและอันตราย โปรดรับความสูงของแป้นพิมพ์จาก UIKeyboardDidShowNotification เนื่องจากค่าจริงมีแนวโน้มที่จะเปลี่ยนแปลงระหว่างเวอร์ชันหลักของ iOS ดูคำตอบของเคนด้านล่าง
Alexander

16

หมายเหตุเวอร์ชัน: ค่านี้ไม่มีค่าใน iOS 9 และ 10 อีกต่อไปเนื่องจากรองรับขนาดแป้นพิมพ์ที่กำหนดเอง

ขึ้นอยู่กับรุ่นและแถบ QuickType:

ใส่คำอธิบายภาพที่นี่

http://www.idev101.com/code/User_Interface/sizes.html


1
หมายเหตุเวอร์ชัน : ค่านี้ไม่มีค่าใน iOS 9 และ 10 อีกต่อไปเนื่องจากรองรับขนาดแป้นพิมพ์ที่กำหนดเอง
Raptor

10

ความสูงของแป้นพิมพ์ขึ้นอยู่กับรุ่นแถบ 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
           }
    }

9

ฉันไม่พบคำตอบล่าสุดดังนั้นฉันจึงตรวจสอบทั้งหมดด้วยโปรแกรมจำลอง (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


ขอบคุณ!


0

iPhone

แป้นพิมพ์ขนาด:

  1. แป้นพิมพ์ 5S, SE, 5, 5C (320 × 568) ขนาด = (0.0, 352.0, 320.0, 216.0) keyboardSize = (0.0, 315.0, 320.0, 253.0)

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)


0

ฉันสร้างตารางนี้ซึ่งมีทั้งความสูงของแป้นพิมพ์ iPhone และ iPad ทั้งสำหรับโหมดแนวนอนและแนวตั้งทั้งที่แถบเครื่องมือเปิดและปิด

ฉันยังอธิบายวิธีการที่คุณสามารถใช้ขนาดนี้ในรหัสของคุณที่นี่

โปรดทราบว่าคุณควรใช้มิติข้อมูลเหล่านี้เฉพาะในกรณีที่คุณต้องการทราบมิติของแป้นพิมพ์ก่อนที่จะจัดวางมุมมอง มิฉะนั้นคำตอบจากคำตอบอื่น ๆ จะทำงานได้ดีกว่า

ใส่คำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.