2016-11-10 80 views
1

我在一个单元格中具有不同内容(视图,标签,图像视图)的tableView单元格。但在某些细胞内容可能不完整。我如何使用调整大小的单元格而不删除和添加总是约束?谢谢。如何在不删除iOS中的约束条件下调整具有不同内容的tableView单元格

illustration of the problem

+0

这里是可以帮助你的东西 - http://stackoverflow.com/questions/18065938/how-to-use-auto-layout-to-move-other-views-when-a-view-is-hidden –

+0

我检查了这里,这里是约束的工作,但我有非常多的元素,它可以是非常多的代码来做到这一点 –

回答

0

一个针对此问题可能的解决方案:

  1. 为隐藏状态添加约束优先1000
  2. 添加调整大小状态额外的限制低优先级(前750)
  3. 保存约束是仅用于隐藏状态的IBOutlet集合
  4. 将约束条件保存为仅将用于调整大小的状态到另一个IBOutlet收集

代码:

@IBOutlet var hiddenConstraints: [NSLayoutConstraint] = [] 
@IBOutlet var visibleConstraints: [NSLayoutConstraint] = [] 

func hide(_ hide: Bool) { 

    for hiddenConstraint in self.hiddenConstraints { 
     hiddenConstraint.isActive = hide 
    } 

    for visibleConstraint in self.visibleConstraints { 
     visibleConstraint.isActive = !hide 
    } 

    self.layoutIfNeeded() 
} 

有更快的解决方案:

  1. 移动内容可以隐藏到容器视图
  2. 设置高度约束的容器视图
  3. 变化从代码高度约束常量到0如果隐藏或适当的高度,如果可见

代码:

@IBOutlet var heightConstraint: NSLayoutConstraint! 

func hide(_ hide: Bool) { 

    self. heightConstraint.constant = hide ? 0 : 150 //Estimated height 

    self.layoutIfNeeded() 
} 

这不是一个好办法,因为它会导致崩溃的约束在运行时。所以我更喜欢用第一个。

此外,您还需要从表格中更新您的单元格以将其他单元格向上或向下移动。

+0

谢谢,工作良好 –

0

雷Wenderlich对表格单元格的动态调整大小一个梦幻般的教程,可以在这里找到: https://www.raywenderlich.com/129059/self-sizing-table-view-cells

TL; DR你需要确保你的内容在所有四边固定到单元格的内容视图,以及设置为高优先级垂直拥抱,大于或等于您的标签上的高度限制。

+0

问题是,意见有两种状态:隐藏,不隐藏。当它不隐藏时,它具有高度和所有约束,并且单元格不能更小 –

+0

当你说隐藏时,我假设你正在设置隐藏属性?尝试为高度约束添加一个出口,并将其设置为0以隐藏,然后单元格将按预期调整大小。 –

+0

再次使用约束。否则视图有顶部和底部约束,正如你所说 - 我需要别人在这些项目的网点,并设置0 –

相关问题