2014-10-03 44 views
1

我使用Autolayout自动设置单元格的高度。但我想在我的单元格中使用一些隐藏的UIViews。所以在一些行中他们应该隐藏起来。这里的问题是,如果标签仍然隐藏,它会被自动布局识别,并使用该空间。自我大小细胞。 Autolayout和隐藏的UIViews

所以我想我需要更新我的标签的高度,或者我的约束的高度。

如果我使用Autolayout隐藏单元格中的UIElements,那么正确的方法是什么?

如何更新现有(来自Storyboard)约束?

编辑:发现我能够更新与故事板约束,是否正确的方式来处理? - 但是哪个设置高度是正确的? (这仅仅是一个示范项目)

​​

+2

它可能会更好地在IB中创建两个不同的单元格(或更多,如果您需要它们),并根据该indexPath的数据返回所需的单元格,而不是尝试隐藏视图。这样,每个单元格都可以适当地拥有正确的约束和大小。 – rdelmar 2014-10-03 15:27:45

+0

这是我现在正在努力的解决方案。这些将导致大约12个不同的原型单元,但我想性能仍然会更好。谢谢 – derdida 2014-10-03 15:54:22

回答

3

这是自动布局标准的任务。目前,解决这一任务的方式有两种:

  1. 删除隐藏视图
  2. 更改约束优先

的隐藏视图删除

看起来很容易,你不会如果您不使用UITableView(您必须将其重新放回prepareForReuse),则UICollectionView或您的数据可能会在屏幕上显示,您刚删除了视图时会出现问题。

删除视图是“繁重”的操作,所以如果您选择这种方式,您需要三思而行。

CustomCell.m

- (void) prepareForReuse { 
[super prepareForReuse]; 
// add removed views again 
// establish constraints 
} 

- (void) configureCell { 
// check if you need to hide a view 
[view removeFromSuperview]; 
} 

更改约束优先

假设,你有以下细胞:


视图B


若B有时可以隐藏,然后指定视图A以下限制: 空间与750 底部空间到B如果集合B的500

到上海华为隐藏,变化的空间B = 500,底部空间的SuperView = 750

撤消该改变在prepareForReuse

+0

谢谢你的回答。我的问题在于:我有大约100行与多个可选标签。例如通知或我的验证器的建议。这些标签仅在有用户交互(添加通知,输入验证)时显示 - 所以我不知道是否更好将此标签添加到我的原型单元格中,并删​​除之前重用,或将它们添加到我的单元格中(但因此我仍然需要在重用之前将其删除) - 因此,在这种情况下,我认为最简单(也是最好的方法)是将所有可以看到的东西添加到我的原型单元中,并在重用之前将其删除? – derdida 2014-10-03 12:28:19

+0

我发现如果我隐藏元素(重用之前)应该带来更好的性能,而不是创建一个新的实例,如果需要的话。所以我这种情况下你的版本应该更好。 – derdida 2014-10-03 12:41:06