0
votes

I have a UITableView with custom cells, one cell per section for spacing. I’d like to add an image as the cell background, but I’m not sure how to do so. If I set the cell background image it is obscured by the containerView, and doesn’t have the curved corners. Any suggestions? I’m working with Playgrounds on iPad, so I’d like to do this programmatically. Here’s what I have so far:

import UIKit import PlaygroundSupport

class ViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.register(CardCell.self, forCellReuseIdentifier: "CardCell")
    tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
    tableView.contentInset = UIEdgeInsets(top: 0, left: 30, bottom: 0, right: -30)
    tableView.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
}

}

extension ViewController {

override func numberOfSections(in tableView: UITableView) -> Int {
    return(5)
}
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    cell.contentView.layer.masksToBounds = true
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section : Int) -> Int{
    tableView.rowHeight = 200

    // There is one row in each section
    return 1
}

// Setup spacing between sections
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 50
}

// Make headers transparent (fill with UIView, set as transparent)
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView()
    headerView.backgroundColor = UIColor.clear
    return headerView
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let cell = tableView.dequeueReusableCell(withIdentifier: "CardCell", for: indexPath) as! CardCell

    return cell
}

}

class CardCell: UITableViewCell {

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)


    layer.masksToBounds = false
    layer.shadowOpacity = 0.23
    layer.shadowRadius = 12
    layer.shadowOffset = CGSize(width: 0, height: 0)
    layer.shadowColor = UIColor.black.cgColor
    layer.cornerRadius = 6

    contentView.backgroundColor = .white

    contentView.layer.cornerRadius = 8

}

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

}

PlaygroundPage.current.liveView = ViewController()

1
you need to set ... clipToBounds in your cell - Jawad Ali

1 Answers

0
votes

You can set background image of any cell like this:

cell.selectedBackgroundView = UIImageView(image: UIImage(named: "cellBgImage.png")?.stretchableImage(withLeftCapWidth: Int(0.0), topCapHeight: Int(5.0)))