Я пытаюсь угол радиуса, чтобы посмотреть, который находится внутри UITableView.Это не работает для меня - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь дать угловой радиус UIView, который помещен в UITableViewCell.Мне нужно отобразить сечение как угловой радиус для каждого сечения, поэтому я даю первую ячейку верхнему правому и верхнему левому угловому радиусу, а последнюю ячейку - нижнему правому и нижнему левому угловому радиусу.Но это не работает для меня.

Вот мой код: Это для первой ячейки (строки) 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
    }
}

Мне нужен такой вывод:

enter image description here

1 Ответ

1 голос
/ 06 апреля 2019

Некоторое время назад у меня была похожая проблема, и мне не хватало того, что табличное представление повторно использует ячейки, поэтому мы должны вернуть все остальные ячейки в их состояние по умолчанию.

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

...