2015-02-11 35 views
1

我有这样的UITableViewCell使用自动布局删除视图时重新排列视图

enter image description here

所有必需的约束设置正确,电池自身的大小没有问题,当在iOS 8的内容也会改变。

enter image description here

我要隐藏在一定的条件下标签3。当发生这种情况时,我需要重新定位标签2以及像这样的按钮。

enter image description here

我试图从标签2添加额外的垂直间距约束到按钮和设置其关系到小于或等于。

enter image description here

而在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 
} 

enter image description here

但你可以看到标签2和按键之间的距离依然存在。

是否还有更多的约束条件需要设置或更改现有约束的任何设置才能使其工作?

+0

嘿,如果答案是不清楚或没有解决你的问题,你可以发表评论,或将其标记为接受的,如果它没有?谢谢。 – 2015-02-13 17:24:28

回答

1

尝试将“小于或等于”约束设置为常规约束,将其值设置为您希望在按钮和标签2之间保持的距离,并将其设置为不需要一个低于1000的优先级。

通过将其设置为非必需的约束条件,当包含标签3时不会导致不可满足的约束冲突,并且当您删除标签3时,“非必需但高优先级“约束将会加入。

+0

感谢您的回复。它有效,但我有一个新问题。我将约束设置回相等,并将其优先级更改为749.我还将该常量设置为10.当我运行该应用程序时,该按钮增加了其高度以填充丢失的空间,如[this](http:// i。 imgur.com/3a27hX2.png)。所以我给按钮添加了一个高度约束来保持它的固定,然后像[this](http://i.imgur.com/yOGSTz5.png)那样在label1和label2之间有一个空格。 – Isuru 2015-02-14 13:23:16

1

”小于或等于“不会做任何事情来压缩间距 - 您可能意味着空间要”大于或等于“最小的可能间距。如果“小于”它可能会降为零。

“大于或等于”也不起作用:这是一个持续不断的混乱和挫折的原因,因为“大于或等于”不是的意思是“等于和大于它必须得到更大,但只有当它必须。“即使设置了所有其他尺寸,在iOS8自动调整大小的单元中绝对不是这种情况,自动布局并不需要将尺寸保持在等于常数值;创造一个其他约束可以推到上面但不低于下面的地板更多。自动布局的想法是“你说'大于',一百万比我更满意约一百万个硬币。”

删除视图会将附加到视图的任何约束删除。正如在另一个答案中指出的那样,如果添加了一个链接View2和按钮的低优先级约束条件,如果存在View3,它将按优先级中断,但如果View3及其约束条件被移除,则会进入该优先级。

但是,由于约束被删除,当View3被删除并作为单元重用过程的一部分放回时,您将遇到问题。您可以选择

  1. 在将View3放回时(cellForRowAtIndexPathprepareForReuse)重新创建约束条件。
  2. 保存影响View3的约束,然后再删除它们(或单元格的contentView中的所有约束),也许在单元格NSArray属性中,并在重用之前进行还原。
  3. 如果要删除view3,请使用不同的reuseIdentifier,并在取消出现单元格之前进行检查。发送一条消息为零不做任何事情,所以重复[view3 removeFromSuperview]应该没问题。