我正在尝试查看放置在UITableView内的拐角半径。这对我不起作用

时间:2019-04-06 19:43:55

标签: ios swift uitableview uiview rounded-corners

我试图将转角半径赋予放置在UITableViewCell中的UIView。我需要为每个部分显示类似拐角半径的部分,因此我将第一个单元格设置为右上角和左上角的半径,将最后一个单元格设置为右下角和左下角的半径。但这对我不起作用。

这是我的代码: 这是UITableView的第一个单元格(行)

cell.viewMain.roundCorners(corners: [.topLeft, .topRight], radius: 10.0)
cell.layoutSubviews()
cell.layoutIfNeeded()

这是UITableView的最后一个单元格(行)

cell.viewMain.roundCorners(corners: [.bottomLeft, .bottomRight], radius: 10.0)
cell.layoutSubviews()
cell.layoutIfNeeded()

我正在使用的扩展名:

extension UIView {
    func roundCorners(corners: UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        layer.mask = mask
    }
}

我需要这样的输出:

use code review

1 个答案:

答案 0 :(得分:1)

前段时间我遇到了类似的问题,而我所缺少的是表视图正在重用单元格,因此我们必须将所有其他单元格恢复为默认状态。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! myCell

    let isFirstCell = indexPath.row == 0
    let isLastCell = indexPath.row == TotalRowsCount - 1

    if isFirstCell && isLastCell {
        cell.viewMain.topBottomRounded()
    } else if isFirstCell {
        cell.viewMain.topRounded()
    } else if isLastCell {
        cell.viewMain.bottomRounded()
    } else {
        // THIS IS THE KEY THING
        cell.viewMain.defaultStateForBorders()
    }

    return cell
}

除了这件事,我已经运行了您的代码,并且可以正常工作。

使用扩展方法的帮助方法是:

extension UIView {

func roundCorners(corners: UIRectCorner, radius: CGFloat) {
    let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
    let mask = CAShapeLayer()
    mask.path = path.cgPath
    layer.mask = mask
}

func topRounded() {
    self.roundCorners(corners: [.topLeft, .topRight], radius: 10.0)
}

func bottomRounded() {
    self.roundCorners(corners: [.bottomLeft, .bottomRight], radius: 10.0)
}

func topBottomRounded() {
    self.roundCorners(corners: [.topLeft, .topRight,.bottomLeft, .bottomRight], radius: 10.0)
}

func defaultStateForBorders() {
    self.roundCorners(corners: [], radius: 0)
}

}

enter image description here