как дать разделение между ячейками TableView - PullRequest
0 голосов
/ 06 мая 2018

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

Например:

enter image description here

Ответы [ 3 ]

0 голосов
/ 06 мая 2018
  1. Создать пользовательский TableViewCell.
  2. Содержит требуемые виды в вертикальном StackView.
  3. Добавьте UIView внизу StackView и установите высоту constraint в соответствии с размером необходимого вам пробела (т. Е. 10 пикселей).
  4. Установите ограничение для высоты StackView на требуемую высоту ячейки (т. Е. 70px)
  5. Создать ссылку на StackView высоту Constraint

class CustomCell: UITableViewCell {

    @IBOutlet weak var cellLabel: UILabel!
    @IBOutlet weak var bottomSpace: UIView!
    @IBOutlet weak var stackViewHeight: NSLayoutConstraint!

}

enter image description here

В viewDidLoad:

tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.separatorStyle = .none

В вашем cellForRowAtIndexPath:

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

        guard let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as? CustomCell else { return UITableViewCell() }

        if indexPath.row % 2 == 0 {
            cell.bottomSpace.isHidden = true
            cell.stackViewHeight.constant = 70.0 //Normal cell height
        } else {
            cell.bottomSpace.isHidden = false
            cell.stackViewHeight.constant = 80.0 //Cell height + whitespace
        }

        cell.cellLabel.text = data[indexPath.row]

        return cell
    }

enter image description here

0 голосов
/ 07 мая 2018

Один из способов сделать это -

// Inside UITableViewCell subclass
    override func layoutSubviews() {
        super.layoutSubviews()

        contentView.frame = UIEdgeInsetsInsetRect(contentView.frame, UIEdgeInsetsMake(10, 10, 10, 10))
    }

или вы можете изменить смещение от раскадровки

0 голосов
/ 06 мая 2018

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

class CustomCell: UITableViewCell {

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    lazy public  var line : UIView  = {
        let view  = UIView.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 0.5))
        view.backgroundColor = .gray
        return view
        }()

    lazy public  var stackLine : UIStackView  = {



        let stackLine = UIStackView.init(arrangedSubviews: [self.line,self.line,self.line,self.line,self.line]) // line as you need
        stackLine.axis = .vertical
        stackLine.distribution = .fill
        stackLine.spacing = 1
        stackLine.alignment = .fill
        return stackLine
        }()


    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        self.contentView.addSubview(stackLine)
        NSLayoutConstraint.activate([
            stackLine.leadingAnchor .constraint(equalTo: self.contentView.leadingAnchor, constant: 0),
            stackLine.trailingAnchor .constraint(equalTo: self.contentView.trailingAnchor, constant: 0),
            stackLine.bottomAnchor .constraint(equalTo: self.contentView.bottomAnchor, constant: 0),
            stackLine.heightAnchor.constraint(equalToConstant: 5 * 0.5 + 1 * 4 ) // say 5 line * height of line + line space * number ofline -1
            ]
        )

    }

}
...