TableView和Autolayout的糟糕表现

时间:2015-12-04 10:25:39

标签: ios objective-c uitableview autolayout

我有20个不同的自定义UITableViewCells(及其越来越多),并且所有这些都非常不同(不同的内容,不同的高度......)。

我从我的服务器获取了所有数据源,因此需要一段时间才能在我的UITableView中提供内容。

我在代码中使用Autolayout构建了所有自定义单元格。

当我现在打开我的UITableView并且我开始滚动时,UITableView在可见性方面停留了一会儿,我不知道如何解决这个问题。

以下是一些重要的代码片段:

- (void)viewDidLoad 
{

[super viewDidLoad];

self.tableView.estimatedRowHeight = 250.0f;
self.tableView.rowHeight = UITableViewAutomaticDimension;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
GTBlockCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

//Here i save my data from the Server into my Model(GFBlock)
GFBlock *block = [self.node.blocks objectAtIndex:indexPath.row];

//I think this part, is the reason why it stucks sometimes, here i call a method which build each of my Custom Cells
cell = [[GTAppController sharedInstance]  createInterfaceForBlock:block];

[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];

return cell;
}


//Create the Interface for each Cell
- (GTBlockCell *)createInterfaceForBlock:(GFBlock *)block 
{

NSString* className = [self.interfacesDict objectForKey:NSStringFromBlockType(block.blockTypeId)];

Class c = NSClassFromString(className);


//Open the specific Custom Cell
GTBlockCell* instance = [(GTBlockCell *)[c alloc] initWithBlock:block];

return instance;
}

我还应该提到我的一些自定义单元格具有极高的行高。我也尝试使用estimatedRowHeight,但没有真正改变。

也许你们中的一些人有其他一些好主意?

1 个答案:

答案 0 :(得分:1)

首先,使用工具找出你的代码真正花费时间的地方,而不是猜测自动布局应该受到责备。

其次,你没有重复使用你的细胞。滚动性能在很大程度上取决于细胞重用。

GTBlockCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

此行使单元格出列

cell = [[GTAppController sharedInstance]  createInterfaceForBlock:block];

这条线抛弃了它并构建了一个全新的线。

您需要通过创建单元格来填充单元格。如果您有多种不同类型的单元格,则为每个单元格使用重用标识符,以便使相应类型的单元格出列,然后使用正确的数据填充它。在开始之前使用tableview注册每个表格单元子类,然后您将始终从表格中获取新单元格或回收单元格。