【发布时间】:2018-11-16 02:56:14
【问题描述】:
我正在创建一个类似气泡聊天的应用程序。我为接收和发送气泡聊天创建了自定义函数。
创建它们后,我已将它们添加到使用 UITableView 创建的单元格中。
但是,我无法设置单元格的高度,具体取决于自定义单元格本身的高度。
例如,某些传入的文本可能比之前的要长。
因此我似乎无法根据自定义气泡聊天高度设置每个单元格。
请帮忙!
这是我的表格视图函数
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrMsg.count
}
// second
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
// lastly created
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for:indexPath)
if arrMsg[indexPath.row]["type"] as! String == "outgoing" {
cell.contentView.addSubview(createOutGoingBubble(msg: arrMsg[indexPath.row]["message"] as! String))
}
if arrMsg[indexPath.row]["type"] as! String == "incoming" {
cell.contentView.addSubview(createIncomingBubble(mymsg: arrMsg[indexPath.row]["message"] as! String))
}
return cell
}
This is how it looks currently
如何根据 heightforrowat 函数内部创建的自定义气泡设置单元格的高度?
大概是用线求高并返回:
arrMsg[indexPath.row]["message"] as! String == "outgoing"
**这是我创建要添加到 tableviewcell 中的自定义气泡聊天的功能
func createOutGoingBubble(msg:String) -> UIView {
let subV = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
let label = UILabel()
label.numberOfLines = 0
label.font = UIFont.systemFont(ofSize: 18)
label.textColor = .white
label.text = msg
let constraintRect = CGSize(width: 0.66 * view.frame.width,
height: .greatestFiniteMagnitude)
let boundingBox = msg.boundingRect(with: constraintRect,
options: .usesLineFragmentOrigin,
attributes: [.font: label.font],
context: nil)
label.frame.size = CGSize(width: ceil(boundingBox.width),
height: ceil(boundingBox.height))
let bubbleSize = CGSize(width: label.frame.width + 28,
height: label.frame.height + 20)
let outgoingMessageView = UIImageView(frame:
CGRect(x: view.frame.width - bubbleSize.width - 20,
y: bubbleSize.height - 25,
width: bubbleSize.width,
height: bubbleSize.height))
let bubbleImage = UIImage(named: "outgoing")?
.resizableImage(withCapInsets: UIEdgeInsets(top: 17, left: 21, bottom: 17, right: 21),
resizingMode: .stretch)
.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
outgoingMessageView.image = bubbleImage
outgoingMessageView.tintColor = UIColor(red: 0.40 , green: 0.71, blue: 1.00, alpha: 1)
subV.addSubview(outgoingMessageView)
label.center = outgoingMessageView.center
subV.addSubview(label)
return subV
}
提前致谢!
【问题讨论】:
-
你能把代码带入问题吗?提前致谢。
-
编辑完成!我的模拟器的图像也在那里。 @benc
-
提示:您应该在
cellForRowAt方法中添加视图!您应该创建一个自定义单元格类并在其中放置气泡,然后仅在cellForRowAt中添加文本。此外,如果您设置了气泡相对于单元格的contentView的约束,则自动尺寸应该注意高度。 -
感谢@RakeshaShastri,但我试图只使用一个 ViewController 并填充其中的所有内容。
-
@IskandarSalleh 除非您在
UITableViewCell中使用默认标签和图像视图,否则您应该每次都创建一个自定义表格视图单元格。 “我试图只使用一个 ViewController 并填充其中的所有内容。” 为什么?我也不是要你创建一个新的视图控制器。只是一个自定义UITableViewCell。您应该查找一些有关表视图的教程。您似乎不熟悉如何使用它们。
标签: ios swift uitableview