我有一个带有静态单元格的 UITableView。我根据某些条件隐藏了一些单元格,方法是在 heightForRowAtIndexPath 方法中将单元格的高度设置为 0,如下所示。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([self shouldHideCell:indexPath]) {
return 0;
}
}
我将 UITableView 的样式设置为 Inset Grouped。因此,当我隐藏部分中的第一个或最后一个单元格时,单元格无法正确获得预期的圆角。当第一个或最后一个单元格的高度设置为 0 时,有什么办法可以使角成为圆角吗?
您还可以创建自定义视图来替换单元格内容,同时保持单元格本身在布局中,而不是通过返回高度 0 来完全隐藏单元格。
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifier" forIndexPath:indexPath];
if ([self shouldHideCell:indexPath]) {
cell.contentView.hidden = YES;
} else {
cell.contentView.hidden = NO;
/*your cell must be configure here*/
}
return cell;
}
如果您仍然喜欢隐藏单元格,您可以检查第一个和最后一个可见的单元格,然后调整layer.cornerRadius和layer.masksToBounds属性
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifier" forIndexPath:indexPath];
if ([self shouldHideCell:indexPath]) {
if (indexPath.row == 0) {
cell.layer.cornerRadius = 10;
cell.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
} else if (indexPath.row == [self.tableView numberOfRowsInSection:indexPath.section] - 1) {
cell.layer.cornerRadius = 10;
cell.layer.maskedCorners = kCALayerMinXMaxYCorner | kCALayerMaxXMaxYCorner;
} else {
cell.layer.cornerRadius = 0;
}
}
return cell;
}