【发布时间】: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