gpt4 book ai didi

ios - 当 UITableViewCell 满足所有约束时约束中断

转载 作者:行者123 更新时间:2023-11-30 14:13:46 25 4
gpt4 key购买 nike

我在界面生成器中有这个单元格约束:

Cell Constrains on IB

这是 UITableViewCell 代码:

public override func updateConstraints() {
super.updateConstraints()
self.contentLabel.preferredMaxLayoutWidth = CGRectGetWidth(UIScreen.mainScreen().bounds) - CGRectGetMinX(self.contentLabel.frame)*2
}

唯一没有高度限制的元素是标签,标签应该随着 TableViewCell 高度的增加而扩展,以处理文本扩展。

但是,我收到此错误日志:

(
"<NSLayoutConstraint:0x1754972f0 UILabel:0x141233ad0.height == 11>",
"<NSLayoutConstraint:0x175497d40 MKMapView:0x141233e30.height == 80>",
"<NSLayoutConstraint:0x17149b350 UILabel:0x141233ad0.top == UITableViewCellContentView:0x141218870.top + 16>",
"<NSLayoutConstraint:0x17149b440 MKMapView:0x141233e30.top == UILabel:0x141233ad0.bottom + 13>",
"<NSLayoutConstraint:0x171499280 UITableViewCellContentView:0x141218870.bottom == UILabel:0x141233c80.bottom + 8>",
"<NSLayoutConstraint:0x171499640 UILabel:0x141233c80.top == MKMapView:0x141233e30.bottom + 8>",
"<NSLayoutConstraint:0x1714997d0 UITableViewCellContentView:0x141218870.height == 44>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x175497d40 MKMapView:0x141233e30.height == 80>

好吧,它根本不会破坏我的屏幕,但这表明事情没有按预期进行。

为了提供更多信息,这里是 UITableViewDataSource/Delegate 的代码

    public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

if indexPath.row == 0 {
let cell = UITableViewCell()
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.backgroundColor = UIColor.whiteColor()
return cell
}


if let unwrapedUnit = self.viewModel.unit {
let kind = self.viewModel.availableCells[indexPath.row - 1]
var cell = tableView.dequeueReusableCellWithIdentifier(kind.identifier.rawValue) as! UnitDetailTableViewCell
cell.selectionStyle = UITableViewCellSelectionStyle.None
switch kind.cellInfoKind {

case CellInfoKind.Map:
let mapCell = cell as! UnitDetailMapTableViewCell

mapCell.titleLabel.text = "mapa"
mapCell.contentLabel.text = "addres \n City + State"

mapCell.coordinate = CLLocationCoordinate2D(latitude: CLLocationDegrees(unwrapedUnit.lat), longitude: CLLocationDegrees(unwrapedUnit.lng))

cell = mapCell


/*...*/
default:
return cell

}
cell.sizeToFit()
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
cell.updateConstraints()

return cell
}
return UITableViewCell()

}

// I have the same implementation on tableView:estimatedHeightForRowAtIndexPath:
enter code here
public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

if indexPath.row == 0 {
return CGRectGetHeight(self.titleView.frame)
}

let cell = self.tableView.dataSource?.tableView(tableView, cellForRowAtIndexPath: indexPath) as! UnitDetailTableViewCell
let size = cell.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
return size.height+1
}

所以...知道发生了什么吗?

最佳答案

您需要删除 autoresizing 代码,因为您正在使用 autolayout

也不需要调用

    cell.sizeToFit()
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
cell.updateConstraints()

系统将负责布局 View 并设置约束,您不是第一次更新约束

此外,您可能希望将 preferredMaxLayoutWidth 代码移动到 layoutSubviews(),无需覆盖 updateConstraints()

override func layoutSubviews() {
super.layoutSubviews()
self.contentLabel.preferredMaxLayoutWidth = label.bounds.width
}

关于ios - 当 UITableViewCell 满足所有约束时约束中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com