Dường như có lỗi hoặc chỉ là trạng thái mặc định không lý tưởng. Nhưng dựa trên mã trong dự án thử nghiệm một cái gì đó như dưới đây có thể làm việc sau khi một số điều chỉnh tốt hơn.
Có hai vấn đề với mã mẫu, một là bạn không làm bất cứ điều gì về kích thước của văn bản khi bàn phím xuất hiện, vì vậy bạn không thể sử dụng hoặc xem văn bản dưới bàn phím. Có giải pháp khác nhưng giải pháp nhanh chóng và bẩn là thay đổi kích thước khung hình (trong ứng dụng gửi, tôi cũng sẽ lấy thông tin hoạt ảnh và tạo hiệu ứng khung hình thay đổi để phù hợp với hoạt ảnh bàn phím vượt quá phạm vi của câu hỏi này). Bạn làm điều đó trong 'willShow' hoặc tương tự, và đưa nó trở lại trong 'didHide' hoặc tương tự.
Sau đó, bù đắp nội dung bị nhòe khi ẩn và có vẻ như có một số trạng thái lạ khi bạn kéo nó ra khỏi màn hình trước và xung quanh các cuộc gọi lại để ẩn và di chuyển các thay đổi của chế độ xem. Tôi chỉ lưu trạng thái và "sửa" nó khi bàn phím biến mất và tôi đã cập nhật chế độ xem văn bản.
Tôi đã tạo một vài thuộc tính và một lối thoát trong bảng phân cảnh để di chuyển với chế độ xem văn bản.
- (void) viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
}
- (void) keyboardWillShow:(NSNotification *)notification
{
NSDictionary * info = [notification userInfo];
CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGRect rect = self.textView.frame;
rect.size.height -= size.height;
self.textView.frame = rect;
}
- (void)keyboardDidHide:(NSNotification *)notification
{
NSLog(@"====== keyboardDidHide =======");
NSDictionary * info = [notification userInfo];
CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGRect rect = self.textView.frame;
rect.size.height += size.height;
self.textView.frame = rect;
self.hidingKeyboard = YES;
}
- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%f", scrollView.contentOffset.y);
if(self.hidingKeyboard == YES)
{
scrollView.contentOffset = self.lastOffset;
self.hidingKeyboard = NO;
NSLog(@"====== reset =======");
}
else
self.lastOffset = scrollView.contentOffset;
}
Tôi đang cố gắng để sinh sản. Tôi đã thêm chế độ xem văn bản qua cửa sổ và có văn bản dài. Tôi đặt chế độ loại bỏ bàn phím thành tương tác. Tôi đã thêm một thực thi 'scrollViewDidScroll:' để bắt các bước nhảy lạ. Nó hoạt động như mong đợi. Bạn có thể vui lòng giải thích thêm về trường hợp sử dụng của bạn không? –
Tôi đã đăng dự án ví dụ của mình tại đây: http://cl.ly/013q0t022j0l. Dự án là một chế độ xem văn bản duy nhất trong bảng phân cảnh với một số văn bản ipsum lorem. Trình điều khiển chế độ xem đăng ký cho bàn phím đã ẩn thông báo và cũng là giao diện xem văn bản. Tôi đang đăng nhập thông báo ẩn đã làm cũng như vị trí y của bù đắp nội dung khi cuộn chế độ xem cuộn. – Dino
Nếu bạn chạy dự án và loại bỏ bàn phím, bạn sẽ thấy một số con số khá thất thường đến từ phương thức scrollViewDidScroll sau khi thông báo ẩn đã được kích hoạt. – Dino