Chiều cao dọc và chiều cao ngang được đo bằng điểm.
Chiều cao dọc và chiều cao ngang được đo bằng điểm.
Câu trả lời:
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 userInfo
từ điển từ thông báo và sau đó truy cập vào NSValue
liê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)")
}
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 keyboardWillShow
sự 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.
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 keyboardWillShow
sự 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 constant
giá trị ràng buộc dọc .
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 keyboardWillShow
sự 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).
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.
Chiều cao bàn phím là 216 điểm cho chế độ dọc và 162 điểm cho chế độ Ngang.
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:
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
}
}
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!
điện thoại Iphone
Kích thước bàn phím:
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)