在tableView单元格中显示和隐藏UIImageView

时间:2016-12-23 12:01:54

标签: ios swift uitableview uiimageview

UIImageView点击UIButton(自定义类)时,UITableViewCell显示和隐藏的最佳方法是什么。

实际上我的行高是用UITableViewAutomaticDimension计算的,我已经设置了所有必要的约束。

问题:最好更改单元格高度或UIImageView高度?

如果我更改UIImageView的高度限制,直到重新加载单元格,高度不会改变。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

让您自定义UITableViewCell类,CustomTableCell。在CustomTableCell中,您可以选择UIImageView的出口(例如,imageView)。采取行动UIButton(说,btnShow)。

实施以下方法;

首先在VC中使用全局数组,arrSelected说道

    public func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat{
          return UITableViewAutomaticDimension
    }

    open func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return UITableViewAutomaticDimension
    }

open func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        let customCell : CustomTableCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomTableCell

        customCell.imageView.tag = indexPath.row;
        customCell.btnShow.tag = indexPath.row;

     var xPos : CGFloat!
     var yPos : CGFloat!
     var width : CGFloat!
     var height : CGFloat!

    xPos = cell.imageView.frame.origin.x
    width = cell.imageView.frame.size.width
    height = cell.imageView.frame.size.height

    if  arrSelected.contains(indexPath.row) { 
        yPos = 100 // whatever the height of imageview when image is present
    cell.imageView.isHidden = false

    }
    else{
     yPos = cell.btnShow.frame.size.height 
     cell.imageView.isHidden = true
    }

        cell.imageView.frame = CGRect(x: xPos, y: yPos, width: width, height: height)         

        return customCell
    }

    // btnShow action

    @IBAction func actionbtnShow(_ sender: UIButton) {

    if sender.isSelected {
         let itemToRemoveIndex = arrSelected.indexOf(sender.tag) {
    arrSelected.removeAtIndex(sender.tag)
        sender.isSelected = !sender.isSelected

    }
    else{
         arrSelected.append(sender.Tag)
        sender.isSelected = !sender.isSelected
    }

    // reload tableView
   }

答案 1 :(得分:-2)

您可以在动画块中设置隐藏标记,并将tableView的beginUpdates和endUpdates打包在同一个块中。

UIView.animate(withDuration: 0.2, animations:{
    imageView.isHidden = false
    tableView.beginUpdates()
    tableView.endUpdates()
})

或者在Objective-C中:

[UIView animateWithDuration:0.2 animations:^{
    imageView.hidden = NO;
    [tableView beginUpdates];
    [tableView endUpdates];
}];

像这样,单元格的高度应该增长动画。