macOS端模仿Zoom聊天设置文字颜色及NSTableCellView自适应高度方法
macOS类Zoom聊天功能实现方案
1. 聊天文本颜色设置
你可以根据场景选择纯色或者富文本样式实现:
- 单色文本直接设置
NSTextField的textColor属性即可,示例:// 自己发送的消息文本设为白色 chatTextField.textColor = .white // 对方发送的消息文本设为黑色 chatTextField.textColor = .black - 如需混合样式(比如昵称和消息内容颜色不同),使用
NSAttributedString配置属性即可:let content = NSMutableAttributedString(string: "张三:今天下午3点开产品同步会") // 昵称部分设置为蓝色 content.addAttribute(.foregroundColor, value: NSColor.blue, range: NSRange(location: 0, length: 2)) // 消息内容设置为深色 content.addAttribute(.foregroundColor, value: NSColor.darkGray, range: NSRange(location: 3, length: content.length - 3)) // 赋值给文本框 chatTextField.attributedStringValue = content
2. NSTableView自动行高实现
macOS 10.11及以上版本提供了和iOS UITableViewAutomaticDimension对应的能力,按以下步骤配置即可:
- 第一步:给NSTableView设置自动行高属性
tableView.usesAutomaticRowHeights = true tableView.estimatedRowHeight = 44 - 第二步:完善自定义NSTableCellView的约束配置
- 确保全宽NSTextField的上下左右四条边都和cell的
contentView对应边设置好约束,上下边距不要漏 - 给NSTextField设置
preferredMaxLayoutWidth为你设计的聊天文本最大宽度,避免文本无限横向拉伸 - NSTextField的
numberOfLines设为0,lineBreakMode设为byWordWrapping,支持多行显示
- 确保全宽NSTextField的上下左右四条边都和cell的
- 第三步:在
tableView(_:viewFor:row:)代理方法给cell赋值完成后,调用cell.layoutSubtreeIfNeeded()触发布局计算,确保行高计算准确
如果需要兼容10.11以下的旧系统,自行计算文本高度后在tableView(_:heightOfRow:)代理方法返回即可,文本高度可以通过NSAttributedString的boundingRect(with:options:context:)方法计算得到。
参考效果

内容的提问来源于stack exchange,提问作者niravdesai21
相关产品推荐
相关产品推荐

