UITableViewCell, как добавить границу solid с закругленными углами - PullRequest
0 голосов
/ 27 мая 2020

Я хочу добавить таблицу с рамкой solid со скругленными углами: table with each cell having a solid border and rounded corners.

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

  let maskLayer = CALayer()
  maskLayer.cornerRadius = 10   //if you want round edges
  maskLayer.backgroundColor = UIColor.white.cgColor
  maskLayer.borderColor = UIColor.red.cgColor
  maskLayer.borderWidth = 5
  self.layer.borderColor = UIColor.red.cgColor // no change
  self.layer.borderWidth = 5 // no change
  maskLayer.frame = CGRect(x: self.bounds.origin.x, y: self.bounds.origin.y, width: self.bounds.width, height: self.bounds.height).insetBy(dx: horizontalPadding/2, dy: verticalPadding/2)
  self.layer.mask = maskLayer

Я пробовал добавлять границы, но закругленные углы выглядят очень грязно. Как мне добавить закругленные углы и границу solid?

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

Ответы [ 2 ]

1 голос
/ 27 мая 2020

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

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

    func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }


    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
         return 15
     }

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

Затем в вашем методе cellForRowAt получите sectionIndex с indexPath.section. Затем вы можете добавить радиус угла и границу к самой ячейке, щелкнув ячейку и используя инспектор атрибутов.

Вариант 2 - не использовать новый раздел для каждой ячейки
Следующий код может быть вызван из метода awakeFromNib настраиваемой ячейки.

  let maskLayer = CALayer()
  maskLayer.cornerRadius = 10  
  maskLayer.backgroundColor = UIColor.clear.cgColor
  maskLayer.borderColor = UIColor.red.cgColor
  maskLayer.borderWidth = 5
  maskLayer.frame = CGRect(x: self.bounds.origin.x, y: self.bounds.origin.y, width: self.bounds.width, height: self.bounds.height).insetBy(dx: horizontalPadding/2, dy: verticalPadding/2)
  self.layer.insertSublayer(maskLayer, below: self.layer)

Ограничение этого ответа состоит в том, что вы не можете заставить цвет фона ячейки отличаться от цвета фона таблицы (ну, по крайней мере, я не мог). У него более гладкие закругленные углы, чем у ответа MuSoundiX .

0 голосов
/ 27 мая 2020

Я не знаю, как это сделать с помощью CALayer (). Всегда делаю ячейку с 2-мя UIViews. 1 "фоновый вид" позади другого. Это также создаст границу. Насколько мне известно, результат будет таким же. Может быть, это то, что вы ищете?

class TableViewCell: UITableViewCell {

var viewBackground = UIView()
var viewBackgroundBorder = UIView()

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
        backgroundColor = .clear
        viewBackground.backgroundColor = UIColor.white
        viewBackgroundBorder.backgroundColor = UIColor.red
        viewBackgroundBorder.layer.cornerRadius = 10
        viewBackground.layer.cornerRadius = 9 

        addSubview(viewBackgroundBorder)
        addSubview(viewBackground)

        viewBackgroundBorder.translatesAutoresizingMaskIntoConstraints = false
        viewBackground.translatesAutoresizingMaskIntoConstraints = false

        let constraints = [
            viewBackgroundBorder.topAnchor.constraint(equalTo: topAnchor, constant: 0),
            viewBackgroundBorder.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 0),
            viewBackgroundBorder.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 0),
            viewBackgroundBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 0),

            viewBackground.topAnchor.constraint(equalTo: topAnchor, constant: 2),
            viewBackground.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 2),
            viewBackground.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -2),
            viewBackground.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -2)]

            NSLayoutConstraint.activate(constraints) 
    }

   required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...