如何在swift中删除表行之间的空白区域

时间:2016-05-03 00:47:58

标签: ios swift rows space

我正在尝试从表中删除空白行。 如果一行是空白的,例如没有文本,则该行没有内容,但会创建一个空格。我想消除这个空间吗?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ArrayDetailTableViewCell

    //configure cell

switch indexPath.row {
    case 0:
        cell.fieldLabel.text = "1."
        cell.valueLabel.text = array.item1
    case 1:
        if array.item2 != "cod" {
            cell.fieldLabel.text = "2."
            cell.valueLabel.text = array.item2
        } else {
            cell.fieldLabel.text = ""
            cell.valueLabel.text = ""
    default:
        cell.fieldLabel.text = ""
        cell.valueLabel.text = ""
    }

}

see here the print

3 个答案:

答案 0 :(得分:0)

要删除空格,一种方法是在heightForRowAtIndexPath中更改高度返回。

但是在heightForRowAtIndexPath中,我们无法调用cellForRowAtIndexPath,因为它将变为递归并且应用程序将崩溃。因此,我们必须使用我们的数据源来检查哪些元素返回空高度。

像这样:

class My_UITableView: UITableView, UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate {

    var My_Items: [Int: Strings] = [Int: String](); //this is your data source which contains your items.

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if (My_Items.count > indexPath.row){
            if let Current_Item = My_Items[indexPath.row] {
                if (Current_Item == ""){
                    return 0; //whatever value you wish to check in your data source item, if it matches your condition send a different height.
                }
            }
        }
        return 50;
    }
}

答案 1 :(得分:0)

也许不应该删除该行,而应该阻止创建该行。使用numberOfRowsInSection来计算数组中的项目。

但是我想如果您只想隐藏单元格,可以尝试在代码中使用cell.hidden

switch indexPath.row {
case 0:
    cell.fieldLabel.text = "1."
    cell.valueLabel.text = array.item1
case 1:
    if array.item2 != "cod" {
        cell.fieldLabel.text = "2."
        cell.valueLabel.text = array.item2
    } else {
        cell.fieldLabel.text = ""
        cell.valueLabel.text = ""
        cell.hidden = true
default:
    cell.fieldLabel.text = ""
    cell.valueLabel.text = ""
}
}

答案 2 :(得分:-2)

viewWillLayoutSubview ViewController方法中包含tableView更改tableView separatorStyle到UITableViewSeparatorStyle.None。我认为这会产生您需要的差异。