2017-09-20 57 views
5

Właśnie zauważyłem, że mój kod identyfikacyjny wysokości klawiatury nie działa już z iOS11.Swift iOS11 - identyfikacja klawiaturyRozmiar wysokości już nie działa

Dla urządzeń z systemem iOS10 użyłem tej logiki, aby wykryć, czy klawiatura ukryje określone pole wejściowe (w moim przypadku pole tekstowe). W takim przypadku klawiatura będzie wyświetlana pod ostatnim aktywnym polem tekstowym, aby umożliwić użytkownikom prawidłowe wprowadzanie danych.

W przypadku iOS 11 identyfikacja klawiatury wysokość nie działa.

Helper klasa przykładem klawiatury willAppear logiki Tutaj jest tylko przykładem tego, co robi keyBoardWillShow -> liczy się tylko, jeśli widok musi być przesunięta nad klawiaturą, czy klawiatura ma zamiar ukryć pole tekstowe.

I tak niektóre optymalnie spełniało i okazało się, że poniżej linii kodu działa odmiennie od iOS 10 i iOS 11:

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

wyjściowego debugera iOS10

keyboardSize CGRect (z = (X = 0, y = 568), rozmiar = (szerokość = 320, wysokość = 216))

Wyjście debuggera iOS11

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

Poniżej można zobaczyć pełny kod - to działało aż 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) 
        } 
       } 
      } 
     } 
    } 
} 

UPDATE 2017/09/20

próbowałem go teraz kilka razy. Czasami jest to pokazuje mi również klawiaturę wartość wysokości dla iOS11 - teraz jestem całkowicie mylić .....

Odpowiedz

10

Korzystając UIKeyboardFrameEndUserInfoKey zamiast UIKeyboardFrameBeginUserInfoKey