gpt4 book ai didi

ios - UITableViewCell 不显示 UILabel

转载 作者:行者123 更新时间:2023-11-30 11:39:53 31 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现聊天大厅。我有一个 UITableViewCell,它以编程方式添加了一个标签。但启动后,什么也没有显示。这是我的包含 UITableViewViewController 代码:

import UIKit
import Firebase

class MessagesViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
{

private var ContactNames = [String]()
private var ContactPicturesURLs = [String]()

@IBOutlet weak var ChatsTableView: UITableView!
override func viewDidLoad()
{
super.viewDidLoad()

ChatsTableView.dataSource = self
ChatsTableView.delegate = self
self.view.layer.backgroundColor = UIColor.white.cgColor
populateActiveChats()
}

private func populateActiveChats()
{
let loggedOnUserID = Auth.auth().currentUser?.uid
let ref = Constants.refs.databaseChatsLite.child(loggedOnUserID!)

// Retrieve the products and listen for changes
ref.observe(.value, with:
{ (snapshot) in

for child in snapshot.children.allObjects as! [DataSnapshot]
{
// Code to execute when new product is added
let chatValueDictionary = child.value as? NSDictionary

self.AddChatToCollections(chatAsDictionary: chatValueDictionary)
self.DispatchQueueFunc()

}
})
}

func AddChatToCollections(chatAsDictionary: NSDictionary!)
{
let contactName = chatAsDictionary["userName"] as! String
self.ContactNames.append(contactName)
}

func DispatchQueueFunc()
{
DispatchQueue.main.async
{
self.ChatsTableView.reloadData()
}
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return ContactNames.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = ChatsTableView.dequeueReusableCell(withIdentifier: "chat_room_cell", for: indexPath) as! PrivateChatUITableViewCell

var index = indexPath.row
cell.ContactName.text = ContactNames[index]

return cell

}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{

chatIndexToLoad = indexPath.row
performSegue(withIdentifier: "segue_to_chatroom", sender: self)
}

var chatIndexToLoad: Int = -1

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if (segue.identifier == "segue_to_chatroom")
{
let destination = segue.destination as! PrivateChatViewController
destination.senderId = Constants.refs.currentUserInformation?.uid
destination.senderDisplayName = Constants.refs.currentUserInformation?.displayName

}
}

}

这是我的TableViewCell的代码:

import UIKit

class PrivateChatUITableViewCell: UITableViewCell
{
var ContactName: UILabel!


required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)

commonInit()
}

func commonInit()
{
ContactName = UILabel()

self.addSubview(ContactName)
}

override func layoutSubviews()
{
let margins = self.contentView.layoutMarginsGuide

ContactName.center = self.center

}
}

但是我的单元格显示为空白,如果它确实显示的话:

TableView

我确实调试了代码,并确保单元格在其标签中显示文本,因此它不为空,如下图所示:

Cell not empty

有人有标签不出现的解决方案吗?

此外,我调试了 PrivateChatUITableViewCell 中的 commonInit 函数,它确实命中了 addSubView 和约束命令

最佳答案

这可能是因为您在表格单元格中进行了初始化。表格中似乎有一个零帧标签。您应该使用公共(public) init 中设置的 NSLayoutConstraint 设置标签的位置,也可以使用上面的方式。

lazy var ContactName : UILabel = {
let view = UILabel()
view.textColor = UIColor.white
view.textAlignment = .center
return view
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)

self.addSubview(ContactName)
//set your constraints by NSLayoutConstraint
}

关于ios - UITableViewCell 不显示 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49372269/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com