如何在 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
}
尝试为收件箱 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
}