ios - 文本字段隐藏聊天的最后一条消息 - Swift

标签 ios swift keyboard

我的聊天应用程序中最后发送的消息被文本字段隐藏。

我尝试更改 UICollectionView 本身的高度,以便 viewTextView 的顶部开始,但这非常有问题而且看起来不健康。特别是当我每次键盘隐藏和再次显示时都必须更改它时。仅当键盘未显示时它才“有效”,但我仍然遇到问题,用户必须手动向下滚动才能看到最后一条消息。

  @objc func handleKeyboardNotification(notification: NSNotification){
    let userInfo = notification.userInfo!
    let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.height
    let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as! Double
    let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as! UInt
    let moveUp = (notification.name == NSNotification.Name.UIKeyboardWillShow)

    bottomConstraint?.constant = moveUp ? -keyboardHeight : 0

    let options = UIViewAnimationOptions(rawValue: curve << 16)
    UIView.animate(withDuration: duration, delay: 0, options: options, animations: {
        self.view.layoutIfNeeded()
    }){ (completed) in

        //##HERE IS THE MAIN PART##
        let isKeyBoardShowing = notification.name == NSNotification.Name.UIKeyboardWillShow

        if isKeyBoardShowing{

            var newSize = CGSize()
            newSize.height = (self.collectionView?.frame.size.height)! - (keyboardHeight + 48)
            newSize.width = (self.collectionView?.frame.size.width)!
            self.collectionView?.frame.size = newSize

            self.collectionView?.contentOffset = CGPoint(x: 0, y: 1000)
        }else{
            var newSize = CGSize()
            newSize.height = (self.collectionView?.frame.size.height)! + keyboardHeight
            newSize.width = (self.collectionView?.frame.size.width)!
            self.collectionView?.frame.size = newSize
        }
    }

}

这张图显示了键盘不显示时的问题:

enter image description here

与键盘显示相同:

enter image description here

最佳答案

检查显示消息的表格 View 的约束。它的底部约束应该来自您输入消息的消息 View 。

在最终使用 IQKeyboardManagerSwift pod 来管理键盘时删除处理键盘的代码,它将处理应用内的所有文本字段。

关于ios - 文本字段隐藏聊天的最后一条消息 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51983734/

相关文章:

Android软键盘弄乱了视口(viewport)高度并且永远不会将其设置回来

android - Android 键盘中的表情符号

ios - 内部修饰 (@IBAction) 不适用于 UIButton 子类

swift - relativeDateTimeFormatter 表示 2 天前的日期是昨天

ios - 如何更改 iPhone 部署目标

ios - 自动收缩标签,但为所有其他 UITableViewCell 保持相同的字体大小

ios - 在 BLE 中读取和写入数据以快速打开/关闭 LED

c++ - 在C/C++中滚动自己的键盘/输入系统

ios - 来自 AppDelegate 的自定义 UINavigationBar

iOS : Timezone Issue on Local timezone of iPhone device