与 viewcontroller 一起使用时的 swiftUI 导航栏标题设置
swiftUI navigation bar title setting when using with viewcontroller
cells page
ChatView
这是我的单元格页面代码
var body : some View{
NavigationView {
List(getPairsUser()){i in
NavigationLink(destination: ChatView(friend:i)){
cellView(user : i)
}
.navigationBarTitle(Text("Friends List"),displayMode: .inline)
}
.navigationBarHidden(true)
}.frame(minWidth: UIScreen.main.bounds.width, idealWidth: UIScreen.main.bounds.width, maxWidth: UIScreen.main.bounds.width, maxHeight: .infinity)
.clipShape(Rounded())
}
在导航链接目标中是 ChatView()
ChatView 的代码在这里
struct ChatView: UIViewControllerRepresentable {
@EnvironmentObject var obser:Observer
var db = Firestore.firestore()
var friend:User!
var messageRef:CollectionReference!
var pairRef:CollectionReference!
init(friend:User){
self.friend = friend
}
func updateUIViewController(_ uiViewController: ChatViewController, context: Context) {
if(uiViewController.left){
if(!self.obser.messageListenerFlag[friend.pairUid]!){
self.obser.messageListenerFlag[friend.pairUid] = true
if( uiViewController.lastMessageDate != nil){
self.obser.pairLastMessages[friend.pairUid] = uiViewController.lastMessage
self.obser.pairLastMessagesDate[friend.pairUid] = uiViewController.lastMessageDate
}
}
}
}
func makeUIViewController(context: Context) -> ChatViewController {
let chatViewController = ChatViewController()
chatViewController.navigationItem.title = self.friend.name
self.navigationBarTitle(Text(self.friend.name))
chatViewController.title = self.friend.name
chatViewController.senderId = self.obser.__THIS__.Uid
chatViewController.senderDisplayName = self.obser.__THIS__.Name
chatViewController.friend = self.friend
chatViewController.messageRef = self.db.collection("pairs").document(self.friend.pairUid).collection("messages")
chatViewController.pairRef = self.db.collection("pairs").document(self.friend.pairUid).collection("typingIndicator")
chatViewController.__THIS__ = self.obser.__THIS__
let _url = URL(string: self.friend.image)!
if let data = try? Data(contentsOf: _url) {
chatViewController.friendImage = UIImage(data: data)
}
self.obser.messageListenerFlag[friend.pairUid] = false
self.obser.unreadMessageCount[friend.pairUid]? = 0
return chatViewController
}
typealias UIViewControllerType = ChatViewController
}
我想做的是进入 ChatView
我想在橙色块(图中)中添加一些文字(朋友的名字)
我已经尝试在单元格页面上添加 .navigationTitle,但它不起作用
我也试着修改了viewcontroller的标题,但是还是不行
我该怎么办?
在我回答你的问题之前,很抱歉没有进行任何测试。这只是基于我的假设。
设置 chatViewController.navigationItem.title = self.friend.name
而不是调用 SwiftUI 视图的 navigationBarTitle
。
我认为推送的视图不是普通的 SwiftUI 而是 UIKit 视图视图,因此您应该以 UIKit 方式处理它。
cells page
ChatView
这是我的单元格页面代码
var body : some View{
NavigationView {
List(getPairsUser()){i in
NavigationLink(destination: ChatView(friend:i)){
cellView(user : i)
}
.navigationBarTitle(Text("Friends List"),displayMode: .inline)
}
.navigationBarHidden(true)
}.frame(minWidth: UIScreen.main.bounds.width, idealWidth: UIScreen.main.bounds.width, maxWidth: UIScreen.main.bounds.width, maxHeight: .infinity)
.clipShape(Rounded())
}
在导航链接目标中是 ChatView()
ChatView 的代码在这里
struct ChatView: UIViewControllerRepresentable {
@EnvironmentObject var obser:Observer
var db = Firestore.firestore()
var friend:User!
var messageRef:CollectionReference!
var pairRef:CollectionReference!
init(friend:User){
self.friend = friend
}
func updateUIViewController(_ uiViewController: ChatViewController, context: Context) {
if(uiViewController.left){
if(!self.obser.messageListenerFlag[friend.pairUid]!){
self.obser.messageListenerFlag[friend.pairUid] = true
if( uiViewController.lastMessageDate != nil){
self.obser.pairLastMessages[friend.pairUid] = uiViewController.lastMessage
self.obser.pairLastMessagesDate[friend.pairUid] = uiViewController.lastMessageDate
}
}
}
}
func makeUIViewController(context: Context) -> ChatViewController {
let chatViewController = ChatViewController()
chatViewController.navigationItem.title = self.friend.name
self.navigationBarTitle(Text(self.friend.name))
chatViewController.title = self.friend.name
chatViewController.senderId = self.obser.__THIS__.Uid
chatViewController.senderDisplayName = self.obser.__THIS__.Name
chatViewController.friend = self.friend
chatViewController.messageRef = self.db.collection("pairs").document(self.friend.pairUid).collection("messages")
chatViewController.pairRef = self.db.collection("pairs").document(self.friend.pairUid).collection("typingIndicator")
chatViewController.__THIS__ = self.obser.__THIS__
let _url = URL(string: self.friend.image)!
if let data = try? Data(contentsOf: _url) {
chatViewController.friendImage = UIImage(data: data)
}
self.obser.messageListenerFlag[friend.pairUid] = false
self.obser.unreadMessageCount[friend.pairUid]? = 0
return chatViewController
}
typealias UIViewControllerType = ChatViewController
}
我想做的是进入 ChatView
我想在橙色块(图中)中添加一些文字(朋友的名字)
我已经尝试在单元格页面上添加 .navigationTitle,但它不起作用
我也试着修改了viewcontroller的标题,但是还是不行
我该怎么办?
在我回答你的问题之前,很抱歉没有进行任何测试。这只是基于我的假设。
设置 chatViewController.navigationItem.title = self.friend.name
而不是调用 SwiftUI 视图的 navigationBarTitle
。
我认为推送的视图不是普通的 SwiftUI 而是 UIKit 视图视图,因此您应该以 UIKit 方式处理它。