радиус угла для просмотра ячеек

#ios #swift

#iOS #swift

Вопрос:

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

 import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableview: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

extension ViewController:UITableViewDataSource,UITableViewDelegate{

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        // tableview section
        let cell = tableView .dequeueReusableCell(withIdentifier: "cell") as! MyTableViewCell
        if indexPath.row == 0{

            cell.myview.roundCorners(corners: [.topLeft,.topRight], radius: 10)

        } else if indexPath.row ==  3 {
            cell.myview.roundCorners(corners: [.bottomRight,.bottomLeft], radius: 10)

        }

        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 200
    }


    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

       // let cell = cell as! MyTableViewCell
    }
}

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

        self.layer.mask = mask
    }
}
  

Комментарии:

1. Проверьте в отладчике, self.bounds возвращает ли он правильное значение (в roundCorners ). При первом создании ячейки разметка, возможно, еще не была запущена и self.bounds может быть недействительной.

2. Попробуйте добавить cell.myview. layer.maskToBounds = true

3. Спасибо @Codo. Я получаю свою ошибку, и теперь я меняю свой код.

Ответ №1:

Вы также должны обрабатывать строки в середине следующим образом:

 switch indexPath.row {
case 0: //round top
    cell.myview.roundCorners(corners: [.topLeft,.topRight], radius: 10)
case 3: //round bottom
    cell.myview.roundCorners(corners: [.bottomRight,.bottomLeft], radius: 10)
default: //remove rounded corners. This is important since cells are reused
    cell.myview.roundCorners(corners: [.allCorners], radius: 0)
}
  

Комментарии:

1. Мой код работает, но не в первый раз при первой загрузке tableview. когда моя ячейка становится невидимой после прокрутки и снова возвращается к первой ячейке, она показывает мне правильный путь. Я впервые ищу, почему это не работает