10

目前,我正在使用一个嵌入的容器视图,UITableView并且正在使用IQKeyboardManagerCocoaPod 滚动视图,这样我的视图UITextFieldsUITextViews不会被键盘覆盖。

我可以成功地import IQkeyboardManager让它在其他视图中工作,但是当UITableView它嵌入到容器视图中时它不起作用。

4

4 回答 4

13
    -(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES]; // This line is needed for the 'auto slide up'
   // Do other stuff
}

简单的解决方案,无需创建观察者。

于 2016-08-05T05:42:29.650 回答
10

我遇到了类似的问题,并使用图书馆作者在此处提供的信息对其进行了修复。

关键声明是:

库逻辑是从 textField 中找到最近的滚动视图。在您的情况下,它是 tableView,这就是库选择 tableView 滚动的原因。

所以我使用的解决方案是在编辑文本字段/视图时禁用 UITableView 滚动属性(使用委托方法),然后在编辑完成后重新启用它。这确保了库不会将 UITableView 检测为可滚动的,因此它会忽略它,然后移动您的容器视图 - 如您所愿。一旦视图按照您的意愿向上移动,您可以通过 UIKeyboardWillShowNotification 重新启用滚动。

例如,对于 UITextField:

-(void) textFieldDidBeginEditing:(UITextField *)textField {
    [self.tableView setScrollEnabled:NO];
}

- (void) textFieldDidEndEditing:(UITextField *)textField {
  [self.tableView setScrollEnabled:YES];
}

但是,为了在视图向上移动后仍然允许滚动,我已经注册了键盘通知,然后在键盘启动后允许滚动:

-(void) keyboardWillShow {
    [self.tableView setScrollEnabled:YES];
}


- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

}
于 2016-08-04T21:02:34.743 回答
0

感谢@vivek agravat 解答!这是快速版本:

 override func viewWillAppear(_ animated: Bool) {
          super.viewWillAppear(true)
}
于 2020-08-19T05:15:41.620 回答
-1

尝试滚动所有视图

在 viewDidLoad

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourVC.keyboardWillShow(_:)), name:UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourVC.keyboardWillHide(_:)), name:UIKeyboardWillHideNotification, object: nil)

之后

func keyboardWillShow(notification:NSNotification)
    {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue()
        {
            self.view.frame.origin.y -= keyboardSize.height
        }
    }

    func keyboardWillHide(notification:NSNotification)
    {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue()
        {
            self.view.frame.origin.y += keyboardSize.height
        }
    }

你可以改变keyboardSize

于 2016-08-04T15:05:57.833 回答