想知道这是否是执行此操作的最佳方式。 tableview切换单元大小

时间:2016-09-03 17:11:40

标签: swift xcode uitableview

我有一个包含两个共享相同信息的原型单元的tableview。当我点击" CardList"按钮所有单元格从一个单元格大小变为较小的大小,然后当我再次点击它时反之亦然。第一次转换工作正常,但从较小的单元格返回到较大的单元格,单元格高度仅为约50磅而不是我设置的338。此外,想知道这是否是通过使用两个不同的单元格来实现此目的的最佳方法。我应该只有一个细胞并重新排列吗?

 var CellSize = Int()

@IBAction func CardList(sender: AnyObject){

    if (sender.titleLabel!?.text == "Card")

    {
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 338
        self.CellSize = 2
        self.tableView.reloadData()
        sender.setTitle("List", forState:  UIControlState.Normal);
    }
    else
    {
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 142
        self.CellSize = 1
        self.tableView.reloadData()
        sender.setTitle("Card", forState:  UIControlState.Normal);
    }
}

////////////////

   override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if CellSize == 1 {

        let cell = self.tableView.dequeueReusableCellWithIdentifier(
            "ResultsCell2", forIndexPath: indexPath)
            as! ResultsCell2

        let row = indexPath.row
        cell.Name.text = Names[row]
        cell.Image.image = UIImage(named: Images[row])
        cell.Price.text = Prices[row]
        return cell

    }
    else
        {
        let cell2 =
            self.tableView.dequeueReusableCellWithIdentifier(
                "ResultsCell", forIndexPath: indexPath)
                as! ResultsCell

        let row = indexPath.row
        cell2.Name.text = Names[row]
        cell2.Image.image = UIImage(named: Images[row])
        cell2.Price.text = Prices[row]

        return cell2
     }
  }

1 个答案:

答案 0 :(得分:1)

要以正确的方式设置cellRow的高度,您应该使用此方法:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{
    if CellSize == 1 {
        return 338
    }
    return 50
}

注意:UITableViewDelegate方法并且为了能够使用它,你应该将tableView的委托设置为你自己的类并在那里调用这个方法。