如何使用Interface Builder中的自动布局设置自定义UITableViewCell大小的约束

时间:2017-08-20 14:20:04

标签: ios xcode autolayout

我有一个自我调整大小的tableViewCell,它提供了评论。如果当前用户评论我提出编辑和删除按钮。在这种情况下,我的约束完美。我的所有约束都在Interface Builder中设置。

现在的挑战是,当评论不属于用户时,我为编辑和删除按钮设置.isHidden = true。如何调整此新方案的约束?

enter image description here

编辑:问题是当我在按钮上将.isHidden设置为true时,我希望当按钮空间为空时,单元格高度会缩小。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

您可以:

而不是隐藏buttons

1。UIButton title设为nil

2。只要您想要隐藏按钮,就可以IBOutlet UIButton height constraint并将其设置为0

示例:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return 2
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableCell
    if indexPath.row == 1
    {
        cell.button.setTitle(nil, for: .normal)
        cell.buttonHeightConstraint.constant = 0
    }
    return cell
}

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

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

自定义UITableViewCell

class TableCell: UITableViewCell
{
    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var buttonHeightConstraint: NSLayoutConstraint!
}

<强>截图:

enter image description here

这将根据您的要求处理约束。

答案 1 :(得分:1)

另一种方法:

将约束的.isActive状态从按钮底部切换到单元格的底部,以及.isHidden状态。

为此,请将date标签底部的垂直空间约束添加到单元格的底部,设置为>= 4(或按钮所需的“填充”数量。不存在)。

为“间距约束”添加@IBOutlet,从“编辑”按钮的底部到单元格的底部。在您的图片中,它显示为bottom = Edit Button.bottom + 2。当您将约束从IB拖动到源文件时,它将生成如下所示的IBOutlet行:

@IBOutlet weak var editButtonBottomConstraint: NSLayoutConstraint!

您需要编辑该行,但是...禁用时会释放约束,除非您有一个“强”引用。因此,只需删除weak修饰符:

@IBOutlet var editButtonBottomConstraint: NSLayoutConstraint!

现在,在cellForRowAt,你可以这样做:

    cell.deleteButton.isHidden = !(comment.userID == appUserID)
    cell.editButton.isHidden = !(comment.userID == appUserID)
    cell.editButtonBottomConstraint.isActive = (comment.userID == appUserID)

虽然,就个人而言,我会在单元格中创建一个函数。

但是,根据您的手机设计,我猜测commentsLabel可能/可能是多线标签?如果评论是8行,你会希望细胞垂直扩展吗?如果是这样,你仍然有一些约束关系可以解决。