为什么页眉和页脚在删除时会跟随行的移动?

Ulf*_*lak 5 uitableview ios swift

我正在Swift中构建一个很大程度上依赖于Table Views的应用程序.它使用页眉和页脚,以及行删除.由于某些奇怪的原因,当我执行行删除时,页眉和页脚跟随要删除的行的滑动.下面的截图解释了我的意思.

在此输入图像描述

你怎么避免这个?

我正在实现这样的删除功能:

// Deleting
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {

        // Handling data source updating, cell row deletion, transition...

    }
}
Run Code Online (Sandbox Code Playgroud)

页眉和页脚如下:

// ## Header ##
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerCell = tableView.dequeueReusableCellWithIdentifier("shoppingHeader") as! ShoppingTableViewHeaderCell

    // Clear up startup background
    headerCell.textLabel?.backgroundColor = UIColor.clearColor()

    // Add covering background color
    headerCell.backgroundColor = UIColorFromHex(0x22b8a3, alpha: 1)

    // Set store image, or store title if image is unavailable
    let url = NSURL(string: dataSource[sortedStores[section]]["meta_data"]["logo"].string!)
    let data = NSData(contentsOfURL: url!)
    if data != nil { // Store image
        let image = UIImage(data: data!)
        headerCell.imageView?.image = imageResize(image: image!, cellWidth: 90, cellHeight: 30)
    } else { // Store name label
        headerCell.textLabel?.text = dataSource[sortedStores[section]]["meta_data"]["nameStore"].string
        headerCell.textLabel?.font = UIFont(name: "HelveticaNeue-Light", size: 16)
        headerCell.textLabel?.textColor = UIColor.whiteColor()
    }

    // Right hand side details: define strings
    let address = dataSource[sortedStores[section]]["meta_data"]["street"].string
    let distanceMeasure = dataSource[sortedStores[section]]["meta_data"]["distance"].int!
    let numberOfOffers = dataSource[sortedStores[section]]["offers"].count

    // Right hand side details: assign strings to variables
    headerCell.rightLabel0.text = address
    headerCell.rightLabel1.text = "\(distanceMeasure) m away"
    if numberOfOffers == 1 {
        headerCell.rightLabel2.text = "1 offer available"
    } else {
        headerCell.rightLabel2.text = "\(numberOfOffers) offers available"
    }

    // Right hand side details: set text color
    headerCell.rightLabel0.textColor = UIColor.whiteColor()
    headerCell.rightLabel1.textColor = UIColor.whiteColor()
    headerCell.rightLabel2.textColor = UIColor.whiteColor()

    return headerCell
}


// ## Footer ##
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let footerCell = tableView.dequeueReusableCellWithIdentifier("shoppingFooter") as! UITableViewCell

    // Set black color to show that footer moves too.
    footerCell.backgroundColor = UIColor.blackColor() //clearColor()

    return footerCell
}
Run Code Online (Sandbox Code Playgroud)

Wiz*_*kid 7

只需返回headerCell.contentView而不是,headerCell您的问题将得到解决.


Vla*_*lad 4

我认为使用可重复使用的单元格作为页眉和页脚是您的问题。尝试使用笔尖代替。为页眉和页脚单元格创建单独的 .xib 文件。并获取您的手机:

let headerCell = NSBundle.mainBundle().loadNibNamed("YourNibName", owner: self, options: nil).first as! ShoppingTableViewHeaderCell
Run Code Online (Sandbox Code Playgroud)

或者实现一个 UITableViewHeaderFooterView 的子类,为它创建一个笔尖,注册这个笔尖:

 tableView .registerNib(UINib(nibName:"YourNibName", bundle: nil), forHeaderFooterViewReuseIdentifier: "TableHeader") 
Run Code Online (Sandbox Code Playgroud)

并通过以下方式获取标题视图:

let header = tableView.dequeueReusableHeaderFooterViewWithIdentifier("TableHeader")
Run Code Online (Sandbox Code Playgroud)