如何在 table 视图单元格中添加红点徽章?

How to add red dot badge in table view cell?

尝试为收件箱 tableviewcell 中的每个未读数据添加红点标记。

我尝试使用 cell.accessoryview 添加徽章

        let size: CGFloat = 9
        let width = max(size, 0.7 * size * 1) // perfect circle is smallest allowed
        let badge = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: size))
       
        badge.layer.cornerRadius = size / 2
        badge.layer.masksToBounds = true
        badge.textAlignment = .center
        badge.textColor = UIColor.white
        badge.backgroundColor = UIColor.red
        if viewModel.sortedInboxItems[indexPath.section].isRead {
            cell.accessoryView = badge
        }

但是如果使用cell.accessoryview,它会像下图那样改变显示(单元格右角的时间向前移动)。如何让它不改变显示?

编辑

尝试在自定义 uitableview 单元格中创建点作为 uilabel,如下图所示

但是结果如下图所示。红点形状不够好?有人可以帮助解决这个问题吗?

accessoryView 不是单元格 contentView 的一部分。如果您设置 accessoryView,它会将 contentView 推过去以为自己腾出空间。可以找到更多相关信息 here;此图表很有帮助:

如果您不希望它这样做,请将您的红点放入单元格本身,而不是使用 accessoryView。目前还不清楚你是如何构建你的单元格的,但看起来你已经创建了一个自定义 UITableViewCell,所以你应该能够毫无困难地做到这一点。

或者如上文所述,如果适用,您可以在辅助视图中将时间标签与红点放在一起。

考虑使用带圆角的 UIView,就像您对标签所做的那样。为确保形状正确(尺寸已正确初始化)以覆盖 layoutSubviews.

更改其角半径
override func layoutSubviews() {
    super.layoutSubviews()
    badgeInboxView.layer.cornerRadius = badgeInboxView.frame.height/2
}