我想做这样的细胞。我用 swift 。
但是我不知道如何在单元格的右侧和左侧添加边距。
您知道如何对截面进行相同的边缘效果吗? (当有多个单元格时,接触的边缘不会变圆)
当我使用contentInset时:
self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0)
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, -15)
最佳答案
从屏幕快照中,您似乎正在尝试使用分组表格 View 来执行此操作。为此,您应该使用添加到UITableView
而不是UIViewController
的UITableViewController
。
要设置插图,您只需将表 View 的约束/框架设置为从左右边缘稍微进入,然后将 View 的背景色设置为UIColor.groupTableViewBackgroundColor()
然后在cellForRowAtIndexPath
中,您可以这样说:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cornerRadius:CGFloat = 5.0
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
// Configure your cell
let sectionCount = tableView.numberOfRowsInSection(indexPath.section)
let shapeLayer = CAShapeLayer()
cell.layer.mask = nil
if sectionCount > 1
{
switch indexPath.row {
case 0:
var bounds = cell.bounds
bounds.origin.y += 1.0
let bezierPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: [.TopLeft, .TopRight], cornerRadii: CGSize(width: cornerRadius,height: cornerRadius))
shapeLayer.path = bezierPath.CGPath
cell.layer.mask = shapeLayer
case sectionCount - 1:
var bounds = cell.bounds
bounds.size.height -= 1.0
let bezierPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: [.BottomLeft, .BottomRight], cornerRadii: CGSize(width: cornerRadius,height: cornerRadius))
shapeLayer.path = bezierPath.CGPath
cell.layer.mask = shapeLayer
default:
break
}
return cell
}
else
{
let bezierPath = UIBezierPath(roundedRect: CGRectInset(cell.bounds,0.0,2.0), cornerRadius: cornerRadius)
shapeLayer.path = bezierPath.CGPath
cell.layer.mask = shapeLayer
return cell
}
}
您只需根据行的索引路径和该节中的行数应用蒙版。如果您具有动态调整大小的单元格,则可能需要将 mask 应用于
UITableViewCell
子类。您应该得到如下结果: