具有选定状态

时间:2016-04-04 16:15:12

标签: ios swift uitableview autolayout

我正在尝试使用多行标题和副标题构建UITableViewCell。左侧还有一个UIButton,仅显示在选定状态。

根据情况,单元格的高度应为:

  • 头衔和身高副标题+填充
  • 按钮高度+填充

Cell States

约束是:

  • 按钮固定在左上角(固定空间,1000优先)
  • 按钮具有固定大小(1000优先级)
  • 按钮固定在容器底部(大于或等于999)
  • 标题固定在左边的按钮上,右边的容器上有固定的垂直空间(固定空间,1000优先)
  • 标题固定在容器顶部(固定空间,1000优先级)
  • 固定在容器底部的字幕(大于或等于1000)
  • 两个标签都有垂直内容压缩&拥抱优先级设置为1000

该应用针对iOS 8.0+,因此我们使用的是动态高度。来自TableViewController

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 60

以下是我自定义单元格的setSelected方法:

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    plusButton.hidden = !selected

    let buttonAlpha: CGFloat = selected ? 1.0 : 0.0
    plusButtonWidthConstraint.constant = selected ? 38.0 : 0.0
    titleLeadingConstraint.constant = selected ? 8 : 0.0


    if animated == true {
        UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
            self.layoutIfNeeded()
            self.plusButton.alpha = buttonAlpha
            }, completion: nil)
    }
    else {
        self.layoutIfNeeded()
        self.plusButton.alpha = buttonAlpha
    }
}

问题:当标题和/或副标题足够长时(因此在选定模式下它们高于按钮) - 单元格高度不会拉伸到标签的最高位置(参见图3c) )。 如果我选择另一个单元格 - 第一个单元格重绘并且所有大小都正确 对我来说,重新计算标题和副标题的框架是在重新计算细胞界限后发生的。

次要问题: animated参数始终为false(即使用户点击了单元格。但这对主要问题没有任何影响。

0 个答案:

没有答案