titleForHeaderInSection不动

时间:2016-05-04 17:55:36

标签: swift uitableview

我有一个UITableviewController,其标题视图类似于:

https://github.com/andersonkxiass/UITableViewHeader

但是我需要在我的表格中有一个标题标题,在第一个位置它是正确的,但是当我开始移动时,表格标题仍然是静态的

这是我的代码:

class tableComent: UITableViewController {

    var testComentName = [String]()


    var headerView = UIView()

    var viewHeight:CGFloat = 350 {
        didSet {
            moveHeader()
        }
    }

    var scrollOffset:CGFloat = 0 {
        didSet {
            moveHeader()
        }
    }

    private func loadNib() -> UIView {
        let bundle = NSBundle(forClass: self.dynamicType)
        return bundle.loadNibNamed("headerTable", owner: nil, options: nil)[0] as! UIView
    }

    func moveHeader() {
        let viewHeight = (scrollOffset >= 0) ? self.viewHeight : self.viewHeight - scrollOffset
        headerView.frame = CGRect(x: 0, y: -viewHeight, width: view.bounds.width, height: viewHeight)
    }

    var backView = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()
        headerView = loadNib()

        backView.frame = CGRect(x: 0, y: 0 , width: view.bounds.width, height: view.bounds.height)
        backView.backgroundColor = tableView.backgroundColor

        view.addSubview(backView)
        view.sendSubviewToBack(backView)

        // Set the contentInset to make room for the image.
        tableView.contentInset = UIEdgeInsets(top: viewHeight, left: 0, bottom: 0, right: 0)

        // Add the imageView to the TableView and send it to the back.
        view.addSubview(headerView)
        view.sendSubviewToBack(headerView)


        self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None

        testComentName = ["Andres Gómez","Beatriz Gómez", "Francisco Manzo", "Rodolfo Martínez","Enrique Vega","Ana Lemus"]
        loadTable()

    }

    override func viewWillAppear(animated: Bool) {
        loadTable()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func viewDidLayoutSubviews() {
        // Update the image position after layout changes.
        moveHeader()
    }

    // Update scrollOffset on tableview scroll
    override func scrollViewDidScroll(scrollView: UIScrollView) {
        scrollOffset = tableView.contentOffset.y + viewHeight
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return testComentName.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("CellComentYo", forIndexPath: indexPath) as! celdaComentYo
            cell.selectionStyle = .None
            cell.nomLabel.text = testComentName[indexPath.row]
            return cell
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        return "My Title:"
    }

    func loadTable() {
        self.tableView.reloadData()
    }

}

我猜问题是在scrollViewDidScroll中,但我不知道如何启用滚动标题。

谢谢!

1 个答案:

答案 0 :(得分:0)

我总是这样做:

  1. 在控制器顶部添加imageView
  2. 使用空标题添加tableView(与图像大小相同

        //ImageView
        imageView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: self.headerHeight)
        imageView.image = UIImage(assetIdentifier: headerImageAsset)
        imageView.contentMode = UIViewContentMode.ScaleAspectFill
        imageView.clipsToBounds = true
    
        //Create empty header for the table
        let headerView = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: self.headerHeight))
        headerView.backgroundColor = UIColor.clearColor()
        tableView.tableHeaderView = headerView
    
  3. 在滚动代表上:

    func scrollViewDidScroll(scrollView: UIScrollView) {
            let yScroll = scrollView.contentOffset.y
    
            if yScroll < 0.0 {
                imageView.frame = CGRectMake(yScroll, 0, screenWidth - (yScroll * 2), self.headerHeight - yScroll)
            } else {
                self.imageView.frame = CGRectMake(0, -yScroll/3, screenWidth, self.headerHeight)
            }
        }