【问题标题】:Swift - Constraints issue in expandable TableViewCellSwift - 可扩展 TableViewCell 中的约束问题
【发布时间】:2016-08-22 14:15:09
【问题描述】:

我正在创建一个带有标签和选择器视图的可扩展单元格

xib

单元实现

class PickerViewCell: UITableViewCell {

@IBOutlet weak var detailLabel: UILabel!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var height: NSLayoutConstraint!
@IBOutlet weak var picker: UIDatePicker!
var isExpanded:Bool = false
    {
        didSet
        {
            if isExpanded == false{
                self.height.constant = 0.0
                self.picker.hidden = true

            }
            else{
                self.height.constant = 200.0
                self.picker.hidden = false
            }
        }
}
override func awakeFromNib() {
    self.height.constant = 0.0
    super.awakeFromNib()
}

委托方法

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    guard let cell = tableView.cellForRowAtIndexPath(indexPath) as? PickerViewCell else { return }

    cell.isExpanded = !cell.isExpanded
    print(cell.isExpanded)
    UIView.animateWithDuration(0.3) {
        cell.contentView.layoutIfNeeded()
    }

    tableView.beginUpdates()
    tableView.endUpdates()

    tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true)
}

我不断收到关于打破约束的运行时警告。

我设置了一个符号断点,结果发现是这一行

self.height.constant = 200.0

内部单元实现是警告的原因。

但是,我发现它仅在第一次点击给定单元格时发生,在初始点击后我可以多次点击,每次展开和关闭它,并且不会出现警告。我是否应该关心这个运行时警告?

编辑:

我忘了显示 datePicker 约束,包括高度和纵横比:

另外值得一提的是我利用了

self.tableView.estimatedRowHeight = 100.0
self.tableView.rowHeight = UITableViewAutomaticDimension

在我的viewController

【问题讨论】:

  • 我猜问题出在 uipickerview 约束上,目前它被配置为 10 点 == 到底部布局指南,它的顶部 == 到 label.bottom,我认为这是不明确的,因为等式约束,尝试在其中一个中配置优先级
  • 问题是关于高度限制

标签: ios swift uitableview nslayoutconstraint tableviewcell


【解决方案1】:

您将 datePicker 高度设置为 200,但随后也将单元格高度设置为 200。但是单元格高度是 datePicker 的高度 + 10 + 标签的高度。所以这些约束相互冲突。

【讨论】:

  • 我将选取器的约束命名为“高度”
  • 抱歉,我没听懂。但根据您的屏幕截图问题是 datePicker 的高度没有进入单元格(单元格高度为 66.5)。我的建议 - 不要使用 UITableViewAutomaticDimension 作为行高,而使用像 cell.isExpanded 这样的条件? closedCellHeight : 在 heightForRowAtIndexPath 方法中打开的CellHeight。
  • 好吧,我猜这不起作用,但是您可以尝试在答案中发布代码,也许我错误地应用了它
【解决方案2】:

我之前尝试将高度限制的优先级降低到 750 或更低,但没有成功。

但是,感谢这个答案https://stackoverflow.com/a/30333810/4286947 我将它设置为等于 999,结果证明这是这里的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2017-09-17
    • 1970-01-01
    • 2011-04-29
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多