我有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
,但没有真正改变。
也许你们中的一些人有其他一些好主意?
答案 0 :(得分:1)
首先,使用工具找出你的代码真正花费时间的地方,而不是猜测自动布局应该受到责备。
其次,你没有重复使用你的细胞。滚动性能在很大程度上取决于细胞重用。
GTBlockCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
此行使单元格出列
cell = [[GTAppController sharedInstance] createInterfaceForBlock:block];
这条线抛弃了它并构建了一个全新的线。
您需要通过创建单元格来填充单元格。如果您有多种不同类型的单元格,则为每个单元格使用重用标识符,以便使相应类型的单元格出列,然后使用正确的数据填充它。在开始之前使用tableview注册每个表格单元子类,然后您将始终从表格中获取新单元格或回收单元格。