2017-08-28 21 views
6

Thử nghiệm ứng dụng của tôi trên iOS 11 beta 7 - có vẻ như bàn phím không đẩy nội dung lên nếu UIViewController của tôi.UIKeyboardWillShowNotification issues with ios 11 beta 7

Mã này trông như thế này (làm việc kể từ iOS7):

- (void)handleNotification:(NSNotification*)notification { 
if (notification.name == UIKeyboardWillShowNotification) { 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    nextButtonALBottomDistance.constant = keyboardSize.height + initialPhoneBottomDistance; 
    codeBottomViewALBottomDistance.constant = keyboardSize.height + initialCodeBottomDistance; 
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 
    [UIView animateWithDuration:animationDuration animations:^{ 
     [self.view layoutIfNeeded]; 
    }]; 
} 
else if (notification.name == UIKeyboardWillHideNotification) { 
    nextButtonALBottomDistance.constant = initialPhoneBottomDistance; 
    codeBottomViewALBottomDistance.constant = initialCodeBottomDistance; 
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 
    [UIView animateWithDuration:animationDuration animations:^{ 
     [self.view layoutIfNeeded]; 
    }]; 
} 

}

đủ Thú vị - khi tôi bấm nút home (giảm thiểu các ứng dụng) và mở lại nó (mà không giết nó) - bố cục được cố định.

Có vẻ như lỗi iOS 11 beta, nhưng tôi không thể tìm thấy bất kỳ tham chiếu nào cho đến thời điểm này.

Vui lòng biết liệu có ai đó đang gặp sự cố này không.

+2

Thay thế 'UIKeyboardFrameBeginUserInfoKey' bằng' UIKeyboardframeenduserinfokey' –

+0

Dường như đang hoạt động! Cảm ơn rất nhiều @AdityaSrivastava! – Gil

+0

Rất vui được giúp bạn –

Trả lời

9

Sử dụng UIKeyboardFrameEndUserInfoKey vì khóa đó dành cho đối tượng NSValue chứa CGRect xác định khung kết thúc của bàn phím trong tọa độ màn hình. Do không sử dụng UIKeyboardFrameBeginUserInfoKey.

1

Tôi cũng gặp sự cố không di chuyển này. Tôi nghi ngờ rằng khung hình đầu của & luôn không chính xác, trong đó chúng giống nhau hoặc gần giống nhau, nhưng đã được sửa gần đây trong iOS 11 và như vậy đã phá vỡ rất nhiều mã không thực sự hiểu sự khác biệt giữa hai khung này .

Dựa trên những thông tin ở đây https://stackoverflow.com/a/14326257/5282052

Bắt đầu là những gì mà bàn phím bắt đầu giảm giá trông như, mà hầu hết sẽ không muốn. Kết thúc là kết quả của bàn phím trông như thế nào, mà hầu hết chỉ quan tâm đến.

[[[thông báo người dùngInfo] đối tượngForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue] .size;

Thực sự giải quyết được sự cố của tôi với chuyển động ZERO của chế độ xem cuộn.

3

Nếu bạn đang sử dụng UIKeyboardFrameBeginUserInfoKey chìa khóa để có được chiều cao bàn phím, thay thế nó với UIKeyboardFrameEndUserInfoKey để có được chiều cao bàn phím chính xác.

Trong iOS 11, giá trị độ cao của khung cho UIKeyboardFrameBeginUserInfoKey là 0 vì đó là khung bắt đầu. Để có được chiều cao thực tế, chúng tôi cần khung kết thúc và khung kết thúc được trả về bởi UIKeyboardFrameEndUserInfoKey.

Vui lòng tham khảo Quản lý Keyboard documentation:

UIKeyboardFrameBeginUserInfoKey Các chìa khóa cho một đối tượng NSValue chứa một CGRect xác định khung bắt đầu của bàn phím trong tọa độ màn hình. Các tọa độ này không đưa vào tài khoản bất kỳ hệ số xoay nào được áp dụng đến nội dung của cửa sổ theo kết quả thay đổi hướng giao diện. Vì vậy, bạn có thể cần chuyển đổi hình chữ nhật thành các tọa độ cửa sổ (sử dụng phương thức convertRect: fromWindow:) hoặc để xem tọa độ (sử dụng phương thức convertRect: fromView:) trước sử dụng nó.

UIKeyboardFrameEndUserInfoKey Chìa khóa cho một đối tượng NSValue chứa một CGRect xác định khung cuối của bàn phím trong tọa độ màn hình. Các tọa độ này không đưa vào tài khoản bất kỳ hệ số xoay nào được áp dụng đến nội dung của cửa sổ do đó, kết quả là thay đổi hướng giao diện. Vì vậy, bạn có thể cần chuyển đổi hình chữ nhật thành các tọa độ cửa sổ (sử dụng phương thức convertRect: fromWindow:) hoặc để xem tọa độ (sử dụng phương thức convertRect: fromView:) trước sử dụng nó.

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