防止由键盘输入附件视图引起的表格视图动画

Posted

技术标签:

【中文标题】防止由键盘输入附件视图引起的表格视图动画【英文标题】:Prevent table view animation caused by keyboard input accessory view 【发布时间】:2017-08-21 12:06:06 【问题描述】:

我有一个聊天屏幕,它使用视图控制器的inputAccessoryView 来显示工具栏(用于文本输入、发送按钮+其他自定义类型),并且在导航栏和底部边距之间有一个表格视图。

override var inputAccessoryView: UIView 
    return inputToolbar

一切都很好,除了一个案例;视图控制器的初始推送。当它被推进时,表格视图的内容从后面动画输入附件视图。

我希望内容已经固定在输入附件视图上方 - 有什么建议的方法来完成这个吗?

【问题讨论】:

【参考方案1】:

获取索引路径并根据 UIKeyboard 高度更改 UITableview 内容偏移量

 func keyboardWillShow(notification: NSNotification) 
        if ((notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue()) != nil 
            //self.view.frame.origin.y -= keyboardSize.height
            var userInfo = notification.userInfo!
            var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
            keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)

            var contentInset:UIEdgeInsets = self.tbl.contentInset
            contentInset.bottom = keyboardFrame.size.height
            self.tbl.contentInset = contentInset

            //get indexpath
            let indexpath = NSIndexPath(forRow: 1, inSection: 0)
            self.tbl.scrollToRowAtIndexPath(indexpath, atScrollPosition: UITableViewScrollPosition.Top, animated: true)
        
    

    func keyboardWillHide(notification: NSNotification) 
        if ((notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue()) != nil 
            let contentInset:UIEdgeInsets = UIEdgeInsetsZero
            self.tbl.contentInset = contentInset
        
    

【讨论】:

我已经在keyboardWillShow中设置contentInset - 仍然动画:(虽然检查加载时的动画持续时间以查看附件输入视图的持续时间是否较短我可以强制contentInset匹配...会给它一个bash。

以上是关于防止由键盘输入附件视图引起的表格视图动画的主要内容,如果未能解决你的问题,请参考以下文章

键盘可见时,将输入附件视图添加到UITextField

iOS 键盘扩展 - 向标准键盘添加按钮(系统范围的输入附件视图)

输入附件视图行为异常与键盘隐藏和显示事件

IOS 使用输入附件视图切换预测文本视图

swift 键盘粘贴到文本字段使用输入附件视图

如何使用 UISearchBar 作为输入附件视图?