#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. когда моя ячейка становится невидимой после прокрутки и снова возвращается к первой ячейке, она показывает мне правильный путь. Я впервые ищу, почему это не работает