我有一个自定义的UITableViewHeaderFooterView标头。我在本文Swift - Parallax Header View - ScrollView overlap cells上进行了扩展。
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?)无
答案 0 :(得分:0)
您尚未初始化 to
push "route 172.168.1.0 255.255.255.0"
push "route 172.168.2.0 255.255.255.0"
添加此行之前
headerView
再向init headerView中添加一行。
tableView.addImageHeaderView(headerView: headerView, height: 0)
在viewDidLoad中添加您的代码最终将如下所示
headerView = UIView(frame: CGRect(x: 0, y: 0, width: self.bounds.width, height: height))
答案 1 :(得分:0)
如果您的自定义视图是在xib中定义的,请尝试更改此行:
var headerView: UIView!
对此:
lazy var headerView: CustomSoccerHeaderView = {
return Bundle.main.loadNibNamed("CustomSoccerHeaderView", owner: nil, options: nil)!.first as! CustomSoccerHeaderView
}()
请注意不要被这两个概念混淆:
如上所述,您需要第二个选项,但是您发布的代码似乎正在努力支持第一个选项。