Я пытаюсь сделать так, чтобы ячейки табличного представления выглядели «материально». Вот что-то похожее на то, что я хочу сделать ( source ):
Обратите внимание, что на приведенном выше изображении есть тень вокруг всей таблицы. Мне нужна эта тень, но применяется к каждой ячейке табличного представления , а не ко всему табличному представлению.
Сначала я спроектировал свою ячейку в файле XIB. Я поместил UIView
с именем containerView
как подпредставление представления содержимого. Я добавил ограничения, чтобы containerView
имел верхнее, нижнее, левое и правое поля 8. Это так, что containerView
немного меньше, чем представление содержимого, так что тень, которую я на него накладываю, будет видна .
Я также добавил UILabel
под названием label
в качестве подпредставления containerView
, чтобы показать некоторый текст.
Это подкласс UITableViewCell
:
class QueueItemCell: UITableViewCell {
@IBOutlet var label: UILabel!
@IBOutlet var container: UIView!
override func setHighlighted(_ highlighted: Bool, animated: Bool) {
...
}
override func setSelected(_ selected: Bool, animated: Bool) {
...
}
override func awakeFromNib() {
container.layer.shadowColor = UIColor.black.cgColor
container.layer.shadowOpacity = 0.7
container.layer.shadowOffset = CGSize(width: 3, height: 9)
container.layer.shadowRadius = 4
container.layer.cornerRadius = 4
container.layer.shadowPath = UIBezierPath(roundedRect: container.bounds, cornerRadius: 4).cgPath
selectionStyle = .none
}
}
В источниках данных и методах делегатов нет ничего особенного, кроме того, что я установил высоту ячеек на 61 в heightForRowAt
.
Когда я запускаю приложение, я получаю что-то вроде этого:
Тень на нижнем и левом краях довольно хорошая. Но правильный край - полная катастрофа. Верхний край также не имеет тени, что нежелательно. Я пытался сделать метод проб и ошибок с shadowPath
и shadowOffset
, но всегда есть один или два ребра, которые выглядят плохо.
Как получить тень на всех краях ячейки, как показано на первом изображении?