Câu hỏi iOS 11 - Chiều cao bàn phím trả về 0 trong thông báo bàn phím


Tôi đã sử dụng thông báo Bàn phím mà không gặp bất kỳ sự cố nào và nhận được chiều cao chính xác của Bàn phím.

- (void)keyboardDidShow:(NSNotification *) notification{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    NSLog(@"%f",keyboardSize.height);}

nhưng với iOS 11, kích thước bàn phím là 0 khi thông báo được gọi.

Vấn đề xảy ra trong kịch bản này là gì? Tôi đang sử dụng xcode 9 Beta 5


75
2017-08-15 08:59


gốc




Các câu trả lời:


Dùng cái này:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

Đối với Swift, bạn có thể sử dụng:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

163
2017-08-15 09:04



Bạn đã lưu ngày của tôi - Helen Zhukova
Cảm ơn, không bao giờ nghĩ về điều đó - Ammar Hadzic
Thay đổi từ UIKeyboardFrameBeginUserInfoKey thành UIKeyboardFrameEndUserInfoKey đã thực hiện thủ thuật, thx. - user2408952
đã làm việc.!! nhưng bằng cách nào? bất kỳ lời giải thích cho điều này. - Akshay
Điều này sẽ không ảnh hưởng đến các phiên bản iOS khác đúng không? - Yugandhar Pathi


Thay thế UIKeyboardFrameBeginUserInfoKey

với

UIKeyboardFrameEndUserInfoKey

Dưới đây là từ Apple Documents.

UIKeyboardFrameBeginUserInfoKey- Khóa cho đố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.

UIKeyboardFrameEndUserInfoKey - Khóa cho đối tượng NSValue   chứa một CGRect xác định khung kết thúc của bàn phím trong   tọa độ màn hình.


93
2017-08-15 09:04



Apple cần phải cập nhật mã ví dụ của họ sau đó, bởi vì nó không hoạt động nữa trên iOS 11. Cũng từ tài liệu của Apple, nơi họ sử dụng UIKeyboardFrameBeginUserInfoKey: developer.apple.com/library/content/documentation/… - wildcat12
Giải quyết vấn đề của tôi! Cảm ơn vì lời khuyên! - Ernie
Ai đó có thể giải thích cho tôi như tôi 5 tuổi, sự khác biệt giữa hai điều này là gì và tại sao điều này tạo ra sự khác biệt khi nói đến việc UIScrollView tự động cuộn? Tôi thực sự đánh giá cao việc đó. Cảm ơn! - Mario
Nó không hoạt động sau khi chạm vào một textfield với numPad. nếu sau khi numPad tôi chạm vào các trường văn bản chung, bàn phím không lên nữa và khi nó loại bỏ xem có được xuống - Jack Daniel


Thử cái này:

Thay thế UIKeyboardFrameBeginUserInfoKey với UIKeyboardFrameEndUserInfoKey


7
2017-08-15 09:16



[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];phương thức keyboardWillChangeFrame: không chỉ chạy một lần, có thể hai lần, hoặc nhiều hơn. Có thể một số bàn phím có thanh công cụ đặc biệt trên đôi khi, phương thức sẽ chạy nhiều lần vào lúc này. Vì vậy, bạn nên thay thế UIKeyboardFrameBeginUserInfoKey với UIKeyboardFrameEndUserInfoKey để có được khung cuối cùng của bàn phím. - SolinLiu


Tôi đã có một vấn đề tương tự bằng cách sử dụng Xcode Phiên bản 9.0 (9A235); mặc dù tôi đã sử dụng Swift. Trong phương thức keyboardWillShow của tôi, tôi đã viết như sau:

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

    let heightValue = keyboardSize.height    

    ...
}

Thật lạ lùng, lần đầu tiên bàn phímWillShow được gọi, heightValue là 216.0, nhưng trong các cuộc gọi tiếp theo, nó đã trở thành 0! Có lẽ đây là lỗi Xcode.

Tôi đã thay thế UIKeyboardFrameBeginUserInfoKey bằng UIKeyboardFrameEndUserInfoKey và nó đã khắc phục sự cố cho tôi.


5
2017-09-29 16:10



Tôi đa ghi chu điêu tương đương. Nó cũng dường như chỉ áp dụng cho lần đầu tiên bàn phím hiển thị. Bàn phím trên các bộ điều khiển chế độ xem bổ sung đã báo cáo chiều cao là 0 lần đầu tiên nó hiển thị cho bộ điều khiển chế độ xem đó. - jackofallcode


Sự cố này đang diễn ra trên iOS 11.

Thay thế

"UIKeyboardFrameBeginUserInfoKey" với "UIKeyboardFrameEndUserInfoKey"

như được hiển thị bên dưới sẽ khắc phục vấn đề

Mã mục tiêu-C:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

Swift 2.3:

let keyboardSize = (NfnPsgVar.userInfo![UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue().size

Swift 3:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

1
2017-12-20 19:33