2016-02-08 41 views
-1

我的数据源数组中有一些虚拟对象。使用自动布局给表格视图单元赋予0高度

我不想在屏幕上显示它们。我也无法从数据源数组中删除它们。

我正在使用适当的约束来获取动态单元格高度。

有没有一种方法可以显示单元格0高度这些虚拟物体使用的是AutoLayout

+1

如果没有这些元素,或者在运行时决定哪个单元格没有分配,并且没有为虚拟数据添加单元格,您有什么理由不能复制数据源? –

+0

why你是否通过过滤删除虚拟数据?根本没有意义。 – holex

回答

5

而不是制作一个单元格高度= 0,你应该考虑如何不显示该单元格

如果你不能没有将假数据复制你的数据源(因为太大了,也许?)

这是顺便说一下最简单的方法。

然后,你应该建立一个函数,可以给你一个索引的正确数据。

例如:

如果你有[data1, dummy, data2, dummy, data3, data4]

如果你问数据源的第二个元素,它应该如果你问的数据源的第四个元素回应data2 ,它应该回应data4

当然,您还需要一个功能,可以为您提供数据的正确length没有你所有的虚拟数据。

就用在适当的地方这个功能(例如):

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return numberOfActualDataItems(datasource) 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = //Obtain your reusable cell 

     let item = actualDataItemIndex(indexPath.row) 
     //configureCell will be the function were you place your data to view 
     self.configureCell(cell, item) 
     return cell 
} 
+0

不符合我的要求。我根本无法调整数据源数组。我必须在正确的数组索引处具有所有数据,因为我已将大部分单元格索引与数组索引关联,以便在我的代码中进一步使用逻辑。 –

+1

你可以随时引用这个函数,你可以把它们放在数据源的抽象层上。在需要时使用它们。 –

+1

@SwappyDwappy如果您的数据处于您无法以任何方式更改它或它会破坏应用程序**的地步,那么您需要更改数据模型,因为它已损坏。这个答案是一个完美的(也是非常容易的)解决方案,可以做你想做的事。 – Fogmeister

0

这是工作,到目前为止,虽然我没有想重写heightForRowAtIndexPath :(

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

SomeObjectClass *object = [dataSourceArray objectAtIndex:indexPath.row]; 
if (object.objectType == DummyDataType) { 
    return 0; 
} 
return UITableViewAutomaticDimension; 
} 
相关问题