使用IQKeyboardManager來處理項目中的文本框被遮擋的問題是一個很好的選擇, 但是也因為這個三方框架自動做了太多的事情有時候會導致一些很奇怪的問題。最常見的就是當控制器帶有導航欄的時候會導致導航欄上移。官方Demo中也有提供一些解決方法。最近在實現(xiàn)一個表單提交頁的時候,在UITableViewCell中有UITextField,在使用IQKeyboardManager的過程中也發(fā)現(xiàn)導航欄有上移的情況。但是我看Demo中并不會出現(xiàn)這樣的情況。后來發(fā)現(xiàn),在布局UITableView的時候,是直接設(shè)置的frame為self.view.bounds,看起來并沒有什么大問題,但是這樣IQKeyboardManager在處理的時候會讓整個View的frame都上移,導航欄也就跟著偏移了。正確的做法是讓UITableView的frame從導航欄下面開始布局。像這樣
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kTopHeight);
make.bottom.left.right.mas_equalTo(0);
}];
}
這樣,導航欄就不會被頂出屏幕了。