这可能是一个简单的问题,但我还没有找到合适的解决方案,所以我希望有人可以提供帮助。
我在故事板上有一个带有三个标签的单元格的tableview。
所有标签都通过IBOutlet
连接,并具有正确的约束。
问题是我想根据数据删除第二个标签,以便保留约束,第三个标签使用其较低的约束来移近第一个标签。
但是当我运行以下代码时:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"GroupMaterialCell";
GroupMaterialCell *cell = (GroupMaterialCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
// get data and populate row
if([self.materialitems count] >= indexPath.row) {
Material *material = [self.materialitems objectAtIndex:indexPath.row];
cell.folder.text = [NSString stringWithFormat:@"%@: %@", NSLocalizedString(@"Folder", nil), material.folder];cell.name.text = material.name;;
cell.member.text = material.member_name;
cell.date.text = [material getDate];
cell.info.text = [NSString stringWithFormat:@"%@, %@", [material getType], [material getFilesize]];
if([material.folder length] <= 0) {
[cell.folder removeFromSuperview];
}
}
return cell;
}
代码工作正常,直到我向下滚动并重新使用单元格。 然后第二个标签“消失”(removeFromSuperview),因此不可见。
有没有一种快速的方法可以在代码中创建标签(带有约束)并添加/删除它?
希望这一切都有意义,否则问。
更新
解决方案是隐藏标签并设置约束的优先级。
创建要切换的约束的IBOutlet
使用以下内容编辑代码。
if([material.folder length] <= 0) {
[cell.folder setHidden:YES];
cell.memberToFolder.priority = 500;
cell.memberToName.priority = 900;
} else {
[cell.folder setHidden:NO];
cell.memberToFolder.priority = 900;
cell.memberToName.priority = 500;
}
答案 0 :(得分:1)
不要从单元格中移除任何东西,只需处理它的可见性
if([material.folder length] <= 0) {
//set frame if required
[cell.folder setHidden:true];
} else {
//set frame if required
[cell.folder setHidden:false];
}