У меня есть собственный заголовок UITableViewHeaderFooterView. Я взял расширение для этой статьи Swift - Вид заголовка Parallax - ячейки перекрытия ScrollView .
import UIKit
class CustomSoccerHeaderView: UITableViewHeaderFooterView {
var clickBravisso: Soccer?
@IBOutlet weak var bravoBtn: UIButton!
@IBOutlet weak var countBravo: UILabel!
@IBOutlet weak var nameHeader: UILabel!
@IBOutlet weak var imageHeader: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
extension UITableView {
func addImageHeaderView(headerView: UIView, height: CGFloat) {
self.contentInset = UIEdgeInsets(top: height, left: 0, bottom: 0, right: 0)
self.contentOffset = CGPoint(x: 0, y: -height)
self.tableHeaderView = headerView
self.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: self.bounds.width, height: height)
}
func updateHeaderView(height kTableHeaderHeight: CGFloat) {
var headerRect = CGRect(x: 0, y: -kTableHeaderHeight , width: self.bounds.width, height: kTableHeaderHeight)
if self.contentOffset.y < -kTableHeaderHeight {
headerRect.origin.y = self.contentOffset.y
headerRect.size.height = -self.contentOffset.y
}
self.tableHeaderView?.frame = headerRect
}
}
В методе загрузки данных в заголовок ячейки. Установлен в функцию для реализации эффекта Параллакса. Буду очень признателен, кто сможет подсказать и исправить меня. Опыта в этом недостаточно и не удается найти статья права.
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "CustomSoccerHeaderView") as! CustomSoccerHeaderView
header.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 350)
header.clickBravisso = detailSoccer
header.nameHeader.text = detailSoccer.matchS
header.countBravo.text = ""
// header.bravoBtn.addTarget(CustomSoccerHeaderView(), action: #selector(CustomSoccerHeaderView.likeBtn(_:)), for: UIControlEvents.touchUpInside)
detailSoccer.imagePrS.getDataInBackground { (data, error) in
header.imageHeader.image = error == nil ? UIImage(data: data!) : nil
}
return header
}
class DetailSoccerTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIScrollViewDelegate {
@IBOutlet weak var tableView: UITableView!
var detailSoccer: Soccer!
var selectedSoccer = [Soccer]()
var headerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let backButton = UIBarButtonItem()
backButton.title = ""
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
// self.navigationItem.rightBarButtonItem = barButton
// self.navigationItem.rightBarButtonItem?.tintColor = UIColor.universalColorYellow
let yourBackImage = UIImage(named: "backItem")
self.navigationController?.navigationBar.backIndicatorImage = yourBackImage
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = yourBackImage
self.navigationController?.navigationItem.leftItemsSupplementBackButton = true
self.navigationController?.navigationBar.tintColor = UIColor.universalColorYellow
//title = detailSoccer.detailTitleS
let nib: UINib = UINib(nibName: "CustomSoccerHeaderView", bundle: nil)
tableView.register(nib, forHeaderFooterViewReuseIdentifier: "CustomSoccerHeaderView")
tableView.tableFooterView = UIView(frame: .zero)
//tableView.layer.masksToBounds = true
tableView.estimatedRowHeight = 280
tableView.rowHeight = UITableView.automaticDimension
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.register(UINib(nibName:"FootTableViewCell",bundle:nil), forCellReuseIdentifier: "cellSoc")
self.view.addSubview(tableView)
self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0)
self.extendedLayoutIncludesOpaqueBars = true
tableView.addImageHeaderView(headerView: headerView, height: 0)// error
tableView.reloadData()
loadMatchSoccer()
tableView.rowHeight = UITableView.automaticDimension
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
tableView.updateHeaderView(height: 200)
}
}
эта строка выдает ошибку - tableView.addImageHeaderView(headerView: headerView, height: 0)
headerView = (UIView?) Nil