try this for set background image for UICollectionView Swift 4 or later
1. Add This extension in your code out of main class
extension UICollectionView {
func setEmptyMessage(_ message: String,_ img:UIImage) {
let image = UIImageView()
image.contentMode = .scaleAspectFit
image.image = img
let messageLabel = UILabel()
messageLabel.text = message
messageLabel.font = UIFont.boldSystemFont(ofSize: 20)
messageLabel.textColor = .gray
messageLabel.numberOfLines = 0
messageLabel.textAlignment = .center
messageLabel.sizeToFit()
let mainView = UIView()
mainView.addSubview(image)
mainView.addSubview(messageLabel)
//Auto Layout
image.translatesAutoresizingMaskIntoConstraints = false
image.centerXAnchor.constraint(equalTo: mainView.centerXAnchor).isActive = true
image.centerYAnchor.constraint(equalTo: mainView.centerYAnchor , constant: -40).isActive = true
messageLabel.translatesAutoresizingMaskIntoConstraints = false
messageLabel.topAnchor.constraint(equalTo: image.bottomAnchor, constant: 20).isActive = true
messageLabel.leadingAnchor.constraint(equalTo: mainView.leadingAnchor, constant: 10).isActive = true
messageLabel.trailingAnchor.constraint(equalTo: mainView.trailingAnchor, constant: 10).isActive = true
self.backgroundView = mainView
}
func restoreBackgroundView() {
self.backgroundView = nil
}
}
2. How to use
if Data.count == 0 {
self.collectionView.setEmptyMessage("set the message", UIImage(named: "imageName"))
} else {
self.collectionView.restoreBackgroundView()
}