Chiều cao của bàn phím ảo của iPhone là bao nhiêu?


84

Chiều cao dọc và chiều cao ngang được đo bằng điểm.


2
Ở đây bạn có thể tìm thấy tất cả các kích thước của một chiếc iPhone: kích thước iPhone
Pfitz

3
Không sử dụng liên kết "kích thước iPhone" cuối cùng đó! Đó là từ năm 2011, trước khi iOS 8 xuất hiện và cho phép chiều cao bàn phím trên màn hình thay đổi.
Mike Gledhill

@MikeGledhill chiều cao bàn phím ảo thay đổi ngay cả trước iOS 8.
Kiểm tra lại

Liên quan: Nếu bạn đang tìm kiếm các giá trị thực tế của chiều cao bàn phím (ví dụ: cho mục đích gỡ lỗi), hãy xem Chiều cao bàn phím ngoại ngữ iOS?
Senseful

Câu trả lời:


211

Tôi đã sử dụng phương pháp sau để xác định khung của bàn phím trong iOS 7.1.

Trong phương thức init của bộ điều khiển chế độ xem của tôi, tôi đã đăng ký UIKeyboardDidShowNotification:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];

Sau đó, tôi sử dụng đoạn mã sau keyboardOnScreen:để truy cập vào khung của bàn phím. Mã này lấy userInfotừ điển từ thông báo và sau đó truy cập vào NSValueliên kết với UIKeyboardFrameEndUserInfoKey. Sau đó, bạn có thể truy cập CGRect và chuyển đổi nó thành tọa độ của chế độ xem của bộ điều khiển chế độ xem của bạn. Từ đó, bạn có thể thực hiện bất kỳ phép tính nào bạn cần dựa trên khung đó.

-(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));
 }

Nhanh

Và cách triển khai tương tự với 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
Mặc dù có vẻ hơi liên quan nhưng điều này chắc chắn tốt hơn so với việc mã hóa kích thước bàn phím. Câu trả lời chính xác.
n13

2
Đã bỏ phiếu cho câu trả lời này và bỏ phiếu xuống cho câu hỏi. OP chắc chắn không biết anh ấy đang nói gì. Các bạn cẩn thận nhé! Câu trả lời này là một trong những chính xác!
superarts.org Ngày

2
một phần bổ sung cho Khổ ngang: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang

3
Có cách nào để làm điều này mà không xuất hiện bàn phím không? Trong trường hợp của tôi, tôi muốn có một thứ gì đó đằng sau bàn phím có cùng chiều cao (tương tự như cách người gửi tin nhắn có những thứ)
John

@ superarts.org Không cần bỏ phiếu cho câu hỏi; mọi người rất có thể sẽ tìm kiếm câu trả lời này và bây giờ họ sẽ thấy câu trả lời này .. vì vậy tất cả đều tốt :)
Ja͢ck

46

Hãy nhớ rằng, với iOS 8, kích thước bàn phím ảo có thể thay đổi. Đừng cho rằng bàn phím ảo sẽ luôn hiển thị (với độ cao cụ thể ) hoặc ẩn.

Giờ đây, với iOS 8, người dùng cũng có thể bật và tắt khu vực dự đoán văn bản ... và khi họ làm điều này, nó sẽ khởi động lạikeyboardWillShow sự kiện của ứng dụng .

Điều này sẽ phá vỡ nhiều mẫu mã kế thừa, vốn đề xuất viết một keyboardWillShowsự kiện, chỉ đo chiều cao hiện tại của bàn phím ảo và chuyển các điều khiển của bạn lên hoặc xuống trên trang theo số lượng (tuyệt đối) này.

nhập mô tả hình ảnh ở đây

Nói cách khác, nếu bạn nhìn thấy bất kỳ mã mẫu nào, mã này chỉ yêu cầu bạn thêm keyboardWillShowsự kiện, đo chiều cao bàn phím, sau đó thay đổi kích thước chiều cao của các điều khiển của bạn theo số lượng này, điều này sẽ không còn hoạt động nữa.

Trong ví dụ của tôi ở trên, tôi đã sử dụng mã mẫu từ trang web sau, mã này làm hoạt ảnh constantgiá trị ràng buộc dọc .

Thực hành AutoLayout

Trong ứng dụng của mình, tôi đã thêm một ràng buộc vào của tôi UITextView, được đặt ở cuối màn hình. Khi màn hình lần đầu tiên xuất hiện, tôi đã lưu trữ khoảng cách dọc ban đầu này.

Sau đó, bất cứ khi nào keyboardWillShowsự kiện của tôi bắt đầu, tôi thêm chiều cao bàn phím (mới) vào giá trị ràng buộc ban đầu này (vì vậy ràng buộc thay đổi kích thước chiều cao của điều khiển).

nhập mô tả hình ảnh ở đây

Vâng. No thật la xâu xi.

Và tôi hơi khó chịu / ngạc nhiên rằng tính năng Tự động xóa kinh khủng khiếp của XCode 6 không chỉ cho phép chúng tôi gắn các phần dưới cùng của điều khiển vào cuối màn hình hoặc đầu bàn phím ảo.

Có lẽ tôi đang thiếu một cái gì đó.

Khác với sự tỉnh táo của tôi.


trên thực tế, kích thước bàn phím luôn khác nhau, ngay cả trên các phiên bản iOS cũ hơn. ví dụ như kiểm tra chữ viết tay Trung Quốc ngôn ngữ
ReDetection

Rất tiếc, không nhận ra điều đó. Tôi chỉ thấy kỳ lạ là rất nhiều mẫu "keyboardWillShow" luôn cho rằng sự kiện này sẽ chỉ được gọi một lần khi bàn phím xuất hiện hoặc biến mất .. không có chức năng nào để đối phó với việc bàn phím vẫn hiển thị trên màn hình, nhưng thay đổi kích thước của nó.
Mike Gledhill

1
Tôi @MikeGledhill nghĩ rằng bạn sẽ sử dụng "UIKeyboardWillChangeFrameNotification" cho sự thay đổi của khung do luân chuyển hoặc hiển thị (/ ẩn) thanh dự đoán văn bản ...
Abdalrahman Shatou

Tôi vừa thử nghiệm điều này với ứng dụng của mình. UIKeyboardWillChangeFrameNotification luôn được gọi là ASWELL AS sự kiện keyboardWillShow, bất cứ khi nào tôi làm cho bàn phím xuất hiện hoặc bật hoặc tắt khu vực dự đoán văn bản. Vì vậy, nó không thực sự giúp ích nhiều. Quan điểm của tôi là ... người dùng cần cẩn thận một chút với những sự kiện này, vậy thôi.
Mike Gledhill

1
Tại sao điều này không được chú ý nhiều hơn?
rfoo

30

Chiều cao bàn phím là 216 điểm cho chế độ dọc và 162 điểm cho chế độ Ngang.

Nguồn


135
Nếu bạn định đăng những câu hỏi tự trả lời, ít nhất hãy đưa ra những câu trả lời phù hợp. Kích thước của bàn phím phải được lấy từ đối tượng thông báo, không phải giá trị được mã hóa cứng lấy từ một số trang web. Xem ở đây
jrturton

16
@jrturton Câu hỏi không phải là làm thế nào để tìm chiều cao theo lập trình. Câu hỏi này không chỉ hữu ích cho các lập trình viên mà còn cho các nhà thiết kế đồ họa và những người như vậy. Câu trả lời bạn đang yêu cầu thuộc về một câu hỏi khác. Trong thực tế, có một câu hỏi với câu trả lời rằng: stackoverflow.com/a/7302291/310121
Erik B

48
@ErikB Hãy cẩn thận. Kích thước bàn phím phụ thuộc vào ngôn ngữ và loại bàn phím.
Gabriel

13
Vì lợi ích của riêng bạn, KHÔNG BAO GIỜ sử dụng giá trị được mã hóa cứng! Một ví dụ điển hình, người dùng có thể đang sử dụng bàn phím tách (hai phần), không quan tâm nhiều đến chiều cao.
Timo

6
Câu trả lời này là lười biếng và nguy hiểm. Vui lòng lấy chiều cao bàn phím từ UIKeyboardDidShowNotification, vì giá trị thực tế có xu hướng thay đổi giữa các phiên bản phát hành chính của iOS. Hãy xem câu trả lời của Ken bên dưới.
Alexander

16

lưu ý phiên bản: điều này không còn giá trị trong iOS 9 và 10, vì chúng hỗ trợ kích thước bàn phím tùy chỉnh.

Điều này phụ thuộc vào kiểu máy và thanh QuickType:

nhập mô tả hình ảnh ở đây

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


1
lưu ý phiên bản : điều này không còn giá trị trong iOS 9 & 10, vì chúng hỗ trợ kích thước bàn phím tùy chỉnh.
Raptor

10

Chiều cao bàn phím phụ thuộc vào kiểu máy, thanh QuickType, cài đặt của người dùng ... Cách tốt nhất là tính toán dinamics:

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
           }
    }

8

Tôi không thể tìm thấy câu trả lời mới nhất, vì vậy tôi kiểm tra tất cả bằng trình mô phỏng. (IOS 11.0)


Thiết bị | Chiều cao màn hình | Chân dung | Phong cảnh

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 thế hệ thứ 5, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265,0 | 353.0


Cảm ơn!


0

điện thoại Iphone

Kích thước bàn phím:

  1. Bàn phím 5S, SE, 5, 5C (320 × 568) Kích thước = (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) keyboardSize = (0.0, 550.0, 414.0, 346.0)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.