Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift JSQMessage显示在Show Segue的导航栏下_Swift_Jsqmessagesviewcontroller - Fatal编程技术网

Swift JSQMessage显示在Show Segue的导航栏下

Swift JSQMessage显示在Show Segue的导航栏下,swift,jsqmessagesviewcontroller,Swift,Jsqmessagesviewcontroller,我有一个ChatViewController,它扩展了JSQMessagesViewController final class ChatViewController: JSQMessagesViewController { ... override func viewDidLoad() { super.viewDidLoad() title = "Messages" collectionView?.collectionViewL

我有一个ChatViewController,它扩展了JSQMessagesViewController

final class ChatViewController: JSQMessagesViewController {
   ...

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "Messages"

        collectionView?.collectionViewLayout.incomingAvatarViewSize = .zero
        collectionView?.collectionViewLayout.outgoingAvatarViewSize = .zero

        automaticallyScrollsToMostRecentMessage = true

        collectionView?.reloadData()
        collectionView?.layoutIfNeeded()
        collectionView?.collectionViewLayout.springinessEnabled = true

        // REMOVE the attachment button for now
        self.inputToolbar.contentView?.leftBarButtonItem = nil
        self.inputToolbar.contentView?.textView?.placeHolder = "Compose a message to your driver"
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        observeMessages()
    }

    private func observeMessages() {
        messageRef = channelRef!.child("messages")
        let messageQuery = messageRef.queryLimited(toLast:25)
        newMessageRefHandle = messageQuery.observe(.childAdded, with: { (snapshot) -> Void in
            let messageData = snapshot.value as! Dictionary<String, String>
            if let id = messageData["senderId"] as String!, let name = messageData["senderName"] as String!, let text = messageData["text"] as String!, text.characters.count > 0 {
                self.addMessage(withId: id, name: name, text: text)
                self.finishReceivingMessage()
            } else {
                print("Error! Could not decode message data")
            }
        })
    }

 }
final类ChatViewController:jsqMessageViewController{
...
重写func viewDidLoad(){
super.viewDidLoad()
title=“消息”
collectionView?.collectionViewLayout.incomingAvatarViewSize=.0
collectionView?.collectionViewLayout.outgoingAvatarViewSize=.0
automaticallyScrollsToMostRecentMessage=true
collectionView?.reloadData()
collectionView?.layoutIfNeeded()
collectionView?.collectionViewLayout.SpringineSessEnabled=true
//现在请删除附件按钮
self.inputToolbar.contentView?.LeftBarButtonim=nil
self.inputToolbar.contentView?.textView?.placeHolder=“向驱动程序撰写消息”
}
覆盖函数视图显示(u动画:Bool){
super.viewdide显示(动画)
观测信息()
}
专用函数observeMessages(){
messageRef=channelRef!.child(“消息”)
让messageQuery=messageRef.queryLimited(toLast:25)
newMessageRefHandle=messageQuery.observe(.childAdded,带有:{(快照)->Void in
让messageData=snapshot.value为!字典
如果让id=messageData[“senderId”]作为字符串,让name=messageData[“senderName”]作为字符串,让text=messageData[“text”]作为字符串,text.characters.count>0{
self.addMessage(带id:id,name:name,text:text)
self.finishReceivingMessage()
}否则{
打印(“错误!无法解码消息数据”)
}
})
}
}
此视图控制器由具有导航控制器的推送序列调用。在我的故事板中,我有一个简单的序列,从一个条项目按钮推送到一个视图控制器,其中ChatViewController设置为自定义类。在情节提要中,导航栏被推断(显示在顶部)


但是,当我进入ChatViewController时,这些消息会显示在导航栏下。单击消息文本框后,消息将被正确定位。如何修复此问题,以便用户不必单击文本框?是否有一个我缺少的命令可以正确地显示新消息?

这个问题已经得到解决,实际上。您可以简单地设置顶部插图,以说明酒吧的高度。Jesse Squires实际上为这种情况制作了一个特殊的成员,名为
topContentAdditionalInset
,您可以这样使用:

override func viewDidLoad() {
    super.viewDidLoad()

    self.topContentAdditionalInset = myBarsHeight   // in CGFloat
}

事实上,这个问题已经得到解决。您可以简单地设置顶部插图,以说明酒吧的高度。Jesse Squires实际上为这种情况制作了一个特殊的成员,名为
topContentAdditionalInset
,您可以这样使用:

override func viewDidLoad() {
    super.viewDidLoad()

    self.topContentAdditionalInset = myBarsHeight   // in CGFloat
}

谢谢你引导我走上正确的道路。。。我找不到视图控制器的特定属性。。。我最终将collection view content inset top设置为collectionView?.contentInset.top=height+8设置collectionView?.contentInset.top为我搞乱了一些东西,这就是我发现该属性的时候。不过很高兴你能成功!:-)谢谢你引导我走上正确的道路。。。我找不到视图控制器的特定属性。。。我最终将collection view content inset top设置为collectionView?.contentInset.top=height+8设置collectionView?.contentInset.top为我搞乱了一些东西,这就是我发现该属性的时候。不过很高兴你能成功!:-)