2017-09-20 22 views
5

Tôi vừa nhận thấy rằng mã nhận dạng chiều cao bàn phím của tôi không hoạt động nữa với iOS11.nhanh chóng iOS11 - xác định bàn phímKích cỡ chiều cao không hoạt động nữa

Đối với thiết bị iOS10, tôi đã sử dụng logic này để phát hiện, nếu bàn phím sẽ ẩn trường nhập cụ thể (trong trường hợp của tôi là trường văn bản). Nếu đúng như vậy, bàn phím sẽ được hiển thị bên dưới trường văn bản hoạt động cuối cùng để cho phép người dùng nhập đúng cách.

Trong trường hợp iOS 11 việc xác định bàn phím chiều cao không hoạt động.

Helper lớp ví dụ cho bàn phím willAppear Logic Dưới đây chỉ là một ví dụ những gì keyBoardWillShow không -> Nó chỉ kiểm tra, nếu quan điểm cần phải được chuyển phía trên bàn phím, nếu bàn phím sẽ ẩn các textfield.

tôi đã làm một số debuggin và phát hiện ra rằng dòng mã bên dưới công trình khác nhau giữa iOS 10 và iOS 11:

if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 

iOS10 debugger đầu ra

keyboardSize CGRect (origin = (x = 0, y = 568), kích thước = (chiều rộng = 320, chiều cao = 216))

Đầu ra trình gỡ lỗi iOS11

keyboardSize CGRect (origin = (x = 0, y = 568), size = (width = 320, height = 0))

Dưới đây bạn có thể xem mã đầy đủ - nó làm việc cho đến khi iOS 10,3

func keyboardWillShow(notification: NSNotification, view: UIView, activeTextField: UITextField?, scrollView: UIScrollView?) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if view.frame.origin.y == 0{ 
      var aRect : CGRect = (view.viewWithTag(2)?.frame)! 
      aRect.size.height -= keyboardSize.height 
      if let activeField = activeTextField { 
       let tempPoint = CGPoint(x: activeField.frame.origin.x, y: activeField.frame.origin.y + 20) 
       if (aRect.size.height < tempPoint.y){ 
        view.frame.origin.y -= keyboardSize.height 
        if let scrollView = scrollView { 
         let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.size.height) 
         scrollView.setContentOffset(bottomOffset, animated: true) 
        } 
       } 
      } 
     } 
    } 
} 

CẬP NHẬT 2017/09/20

tôi đã cố gắng nó bây giờ nhiều lần. Đôi khi nó cho thấy tôi cũng là một giá trị chiều cao bàn phím cho iOS11 - bây giờ tôi hoàn toàn bối rối .....

Trả lời

10

Sử dụng UIKeyboardFrameEndUserInfoKey thay vì UIKeyboardFrameBeginUserInfoKey

Các vấn đề liên quan