我有UITableViewCell
这样的人。
所有必需的约束都已正确设置,并且当iOS 8中的内容发生更改时,单元格会自行调整大小而不会出现问题。
我必须在某些条件下隐藏标签3 。当发生这种情况时,我需要重新定位标签2 ,按钮更接近这样。
我尝试将标签2中的额外垂直间距约束添加到按钮,并将其关系设置为小于或等于。
在cellForRowAtIndexPath
方法中,我删除标签3并更新布局。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(InfoCell.identifier(), forIndexPath: indexPath) as InfoCell
cell.label3.removeFromSuperview()
cell.layoutIfNeeded()
return cell
}
但是你可以看到标签2 之间的间距和按钮仍然存在。
我是否需要设置或更改现有约束的任何设置才能使其正常工作?
答案 0 :(得分:1)
尝试将“小于或等于”约束设置为普通约束,将其值设置为您希望在按钮和标签2之间保持的距离,并通过将其设置为a来使其不需要优先级低于1000.
通过将其设置为非必需约束,当包含Label 3时,您将不会获得不可满足的约束冲突,并且当您删除Label 3时,“非必需但高优先级”约束将启动。< / p>
答案 1 :(得分:1)
“小于或等于”将无法压缩间距 - 您可能意味着空间“大于或等于”最小可能的间距。如果“小于”它可以降到零。
“大于或等于”也不会起作用:它是混淆和挫折的持续来源,因为“大于或等于”不意味着“等于,大于它必须变得更大,但只有它必须。“即使设置了所有其他尺寸,在iOS8自动调整单元中绝对不是这样,自动布局也不需要保持尺寸更接近等于恒定值;更多的是创建一个其他约束可以推到但不低于其他约束的地板。 Auto Layout的想法是“你说'大于',百万大于我满足于百万dur dur 的约束。”
删除视图会删除附加到视图的所有约束。如在另一个答案中所述,如果您添加了一个链接View2和按钮的优先级较低的约束,那么如果存在View3,它将优先突破,但如果View3及其约束被删除则会启动。
但是,由于删除了约束,因此在删除View3并将其作为单元重用过程的一部分放回时,您将遇到问题。你可以
cellForRowAtIndexPath
或prepareForReuse
时,从头开始重新创建约束。 [view3 removeFromSuperview]
应该没问题。