Câu trả lời cuối của tôi dành cho nhà phát triển, những người cần hiển thị chân trang khi bàn phím được hiển thị. Các giải pháp đúng là phải xem xét tài sản contentInset (có thể được thay đổi sau khi bàn phím được hiển thị), vì vậy nó là siêu dễ dàng:
- (void)scrollToFooter {
UIEdgeInsets tableInsets = self.tableView.contentInset;
CGFloat tableHeight = self.tableView.frame.size.height - tableInsets.bottom - tableInsets.top;
CGFloat bottom = CGRectGetMaxY(self.tableView.tableFooterView.frame);
CGFloat offset = bottom - tableHeight;
if(offset > 0.f) {
[self.tableView setContentOffset:CGPointMake(0, offset) animated:YES];
}
}
tôi phải để ý, mà trong trường hợp của tôi tableView đã được thêm vào ViewController của riêng tôi và là một trong các ô có UITextField trở thành đáp ứng đầu tiên. Để di chuyển chân trang hiển thị khi bàn phím được hiển thị, bạn cần đăng ký bàn phím đã hiển thị thông báo và (trên iOS7) thực hiện phương thức này vào cuối vòng lặp hiện tại, coz trong trường hợp này iOS7 sẽ tự động thực hiện scrollToRowAtIndexPath sau khi phương thức và chân trang của chúng tôi sẽ không được hiển thị.
-(void)registerKeyboardNotification {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShown:)
name:UIKeyboardDidShowNotification object:nil];
}
- (void)keyboardDidShown:(id)notification {
//move to the end of run loop
[self performSelector:@selector(scrollToFooter) withObject:nil afterDelay:.0];
}
Bạn nhận được một trong số lỗi phạm vi :(Tôi nên nói rằng tôi đã thử rằng một trong những đã có trong bài gốc. – Kevin