Граница Uitableviewcell

#ios #swift #swift3 #swift5 #swift5.5

Вопрос:

У меня есть набор uitableviewcell . Я хочу применить цвет границы для следующих условий, Применяя цвет верхней границы для firstcell И цвет нижней границы для lastcell.

Я новичок в swift, поэтому не уверен, возможно ли это.

Ответ №1:

Это можно сделать. Что вам нужно сделать, так это,

  1. Создайте пользовательскую UITableView ячейку, оформите ее так, как вы хотите.
  2. После укладки добавьте 2 UIView буквы с высотой 1 или любой высотой, которую вы хотите, если на то пошло. Давайте назовем их topSeparator amp; bottomSeparator в демонстрационных целях.
  3. Ограничьте один из заголовков в верхней части ContentView пользовательской ячейки tableview, а другой-в нижней части.
  4. Предполагая, что вы используете Storyboards , подключите обе topSeparator amp; bottomSeparator к пользовательской ячейке,
  5. Там после disable обоих topSeparator amp; bottomSeparator в методах init(frame:) или awakeFromNib() в зависимости от того, собираетесь ли вы делать это программно или Nibs с помощью .
  6. Добавьте 2 метода следующим образом в класс ячейки
 // Unhides top s
func showTopSeparator() {
    self.topSeparator.isHidden = false
}

// Unhides bottom separator
func showBottomSeparator() {
    self.bottomSeparator.isHidden = false
}
 
  1. И в viewcontroller, который будет отображать ячейки, добавьте флаг для отображения разделителей на основе IndexPath ячеек. Смотреть ниже
 func tableView(_ tableView: UITableView, 
  cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      // Dequeueing custom cell
      let cell = self.tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath as IndexPath) as! CustomCell
      
      // Flag to display separators
      if indexPath.row == 0 {
         cell.showTopSeparator()
      else if indexPath.row == data.count - 1 {
         cell.showBottomSeparator()
      }
      return cell

}
 

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

1. самостоятельный разделитель дна. isHidden = false В приведенной выше строке что такое разделитель дна? является ли это свойством или я должен объявить переменную и что-то к ней

2. bottomSeperator и topSeparator есть 2 UIViews с a height по вашему вкусу.

Ответ №2:

Добавьте Extension .
Вы можете добавить приведенный ниже код в свой ViewController файл или создать отдельный файл, как я.

CALayer Расширение.swift

 import UIKit

extension CALayer {

    func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
        
        let border = CALayer();
        
        switch edge {
        case UIRectEdge.top:
            border.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: thickness)
            break
        case UIRectEdge.bottom:
            border.frame = CGRect(x:0, y:self.frame.height - thickness, width:self.frame.width, height:thickness)
            break
        case UIRectEdge.left:
            border.frame = CGRect(x:0, y:0, width: thickness, height: self.frame.height)
            break
        case UIRectEdge.right:
            border.frame = CGRect(x:self.frame.width - thickness, y: 0, width: thickness, height:self.frame.height)
            break
        default:
            break
        }
        
        border.backgroundColor = color.cgColor;
        
        self.addSublayer(border)
    }
}
 

TableViewController.swift

 import UIKit

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    @IBOutlet weak var tableView: UITableView!
    let arr = ["a", "b", "c", "d"]
    
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
        
        tableView.tableFooterView = UIView(frame: .zero)
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arr.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as? TableViewCell else { return UITableViewCell() }
        
        cell.label.text = arr[indexPath.row]
        
        //Setting the border
        if indexPath.row == 0 { //first cell
            cell.layer.addBorder(edge: .top, color: .blue, thickness: 0.5)
            
        }
        
        if indexPath.row == arr.count - 1 { //last cell
            cell.layer.addBorder(edge: .bottom, color: .blue, thickness: 0.5)
        }
        
        return cell
    }
}
 

введите описание изображения здесь

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

введите описание изображения здесь

введите описание изображения здесь