使用动态行高时,UITableView间隙

时间:2010-01-05 13:45:24

标签: iphone objective-c uitableview

我有一个高度为400px的UITableView,我想根据要显示的数据填充10或11个自定义UITableViewCells。问题在于,根据我使用当前方法设置每行高度的方式,单元格之间或底部单元格下方存在间隙。我认为这是由于四舍五入。

此代码在一些单元格的末尾放置了分散的1px间隙:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
    if (isWednesdaySchedule) {
        return (tableView.frame.size.height/11);
    }
    else {
        return (tableView.frame.size.height/10);
    }
}  

此代码,返回到NSIntegers的返回值,使所有单元格合在一起,但在底部单元格下面留下几个像素的间隙:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
    if (isWednesdaySchedule) {
        return (NSInteger)(tableView.frame.size.height/11);
    }
    else {
        return (NSInteger)(tableView.frame.size.height/10);
    }
}  

如何解决这个问题,以便我的所有单元格显示在最后一个单元格之间或之下没有间隙?

3 个答案:

答案 0 :(得分:1)

好吧,如果表的边界恰好可以被10或11整除,那么你只会看到一个无间隙表。表的设计假设行将滚动离开屏幕,以便它们尝试填充屏幕。

我认为你有两个选择:

(1)设置行高,使底行离屏幕一半。用户将向上滚动以查看最后一行,并且行之间不存在明显的间隙。最后会有死角,但用户希望在表格中。

(2)使用节页眉和页脚视图直观地填充单个部分顶部和底部的空间,以便根据需要进行定位。我很确定你可以使用任意高度的空透明视图来按照你想要的方向居中。

答案 1 :(得分:1)

如果您实际上不需要单元格具有不同的高度,为什么不根据isWednesdaySchedule更改UITableView的高度?这应该可以解决你提到的问题。

答案 2 :(得分:0)

您可以使底部单元格更大以填充空间。如果尺寸差异不大,则可能不明显。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
    if (isWednesdaySchedule) {
        if (indexPath.row < 10) {
            return (NSInteger)(tableView.frame.size.height/11);
        } else {
            CGFloat bottomPadding = tableView.frame.size.height ((NSInteger)(tableView.frame.size.height/11)*11;
            return (NSInteger)(tableView.frame.size.height/11 + bottomPadding);
        }
    } else {
        if (indexPath.row < 9) {
            return (NSInteger)(tableView.frame.size.height/10);
        } else {
            CGFloat bottomPadding = tableView.frame.size.height ((NSInteger)(tableView.frame.size.height/10)*10;
            return (NSInteger)(tableView.frame.size.height/10 + bottomPadding);
        }
    }
}

代码尚未经过测试,但我认为你明白了。