某些单元格不可见的 UITableViewCell 圆角
UITableViewCell Rounded Corners Not Visible for Some Cells
我的 table 为部分使用圆角单元格。但是,在某些 iOS 设备上,右侧的圆角不可见。这可能不太可能与代码相关,更多的是约束结束。
下面的屏幕截图显示了圆角起作用的地方(绿色框)和它们失败的地方(红色框)
我尝试了以下代码来添加圆角,看起来效果很好:
let path = UIBezierPath(roundedRect: cell.bounds,
byRoundingCorners:[.topRight, .topLeft], // example
cornerRadii: CGSize(width: 15, height: 15))
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
cell.layer.mask = maskLayer
我的单元格是这样初始化的,我在添加内容时没有调整它的大小:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "mycell")
我有一种感觉,添加到单元格的内容会推动隐藏圆角的单元格宽度。有什么想法可能是错误的吗?
您需要子类化 UITableViewCell 并覆盖 layoutSubview()
函数并在那里设置 CAShapeLayer
的路径。
final class MyTableViewCell: UITableViewCell {
private lazy var maskLayer = CAShapeLayer()
var corners: UIRectCorner = [] {
didSet {
setNeedsLayout()
updatePath(with: corners)
}
}
override func layoutSubviews() {
super.layoutSubviews()
updatePath(with: corners)
}
private func updatePath(with corners: UIRectCorner) {
let path = UIBezierPath(
roundedRect: bounds,
byRoundingCorners: corners,
cornerRadii: CGSize(width: 15, height: 15)
)
maskLayer.path = path.cgPath
layer.mask = maskLayer
}
}
然后通过cellForRowAt
中的弯角
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = MyTableViewCell(
style: UITableViewCell.CellStyle.default, reuseIdentifier: "mycell"
)
cell.corners = [.topRight, .topLeft]
// ...
return cell
}
我的 table 为部分使用圆角单元格。但是,在某些 iOS 设备上,右侧的圆角不可见。这可能不太可能与代码相关,更多的是约束结束。
下面的屏幕截图显示了圆角起作用的地方(绿色框)和它们失败的地方(红色框)
我尝试了以下代码来添加圆角,看起来效果很好:
let path = UIBezierPath(roundedRect: cell.bounds,
byRoundingCorners:[.topRight, .topLeft], // example
cornerRadii: CGSize(width: 15, height: 15))
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
cell.layer.mask = maskLayer
我的单元格是这样初始化的,我在添加内容时没有调整它的大小:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "mycell")
我有一种感觉,添加到单元格的内容会推动隐藏圆角的单元格宽度。有什么想法可能是错误的吗?
您需要子类化 UITableViewCell 并覆盖 layoutSubview()
函数并在那里设置 CAShapeLayer
的路径。
final class MyTableViewCell: UITableViewCell {
private lazy var maskLayer = CAShapeLayer()
var corners: UIRectCorner = [] {
didSet {
setNeedsLayout()
updatePath(with: corners)
}
}
override func layoutSubviews() {
super.layoutSubviews()
updatePath(with: corners)
}
private func updatePath(with corners: UIRectCorner) {
let path = UIBezierPath(
roundedRect: bounds,
byRoundingCorners: corners,
cornerRadii: CGSize(width: 15, height: 15)
)
maskLayer.path = path.cgPath
layer.mask = maskLayer
}
}
然后通过cellForRowAt
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = MyTableViewCell(
style: UITableViewCell.CellStyle.default, reuseIdentifier: "mycell"
)
cell.corners = [.topRight, .topLeft]
// ...
return cell
}