Swift JSQMessage显示在Show Segue的导航栏下
我有一个ChatViewController,它扩展了JSQMessagesViewControllerSwift JSQMessage显示在Show Segue的导航栏下,swift,jsqmessagesviewcontroller,Swift,Jsqmessagesviewcontroller,我有一个ChatViewController,它扩展了JSQMessagesViewController final class ChatViewController: JSQMessagesViewController { ... override func viewDidLoad() { super.viewDidLoad() title = "Messages" collectionView?.collectionViewL
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为我搞乱了一些东西,这就是我发现该属性的时候。不过很高兴你能成功!:-)