当我为UITableView设置rowHeight时,不应该更改单元格的高度吗?

时间:2011-12-13 13:15:42

标签: iphone ios cocoa-touch uitableview uikit

问题:
当我为rowHeight设置UITableView时,单元格的高度是否也不会更改?
这是导致我思考它的情况:


我想为底部的每个表格视图单元格设置一个单独的行,更重要的是,我想为它设置从4432的行高。我想要的结果如下:

行高设置正确完成:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView setRowHeight:32.0f];
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

    //...
}

// Even use the delegate of UITableView
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 32.0f;
}

然而,当我为单元格添加单独的行时,我遇到了一个问题:我想在单元格的底部设置单独的行,因此我将y位置设置为cell.frame.size.height - 1.0f。不幸的是,结果显示如下:

当我选择时,单元格改变如下:

1。选择第1行:

2。选定的第2行:

3。选定的第3行:

选择前的单元格高度似乎为44,选中后,它会更改为32。它们像卡片一样一个接一个地重叠,对吧?怪异!

主要代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
        [cell.textLabel setFont:[UIFont fontWithName:@"Futura-Medium" size:15.0f]];
        UIView * seperateLine = [[UIView alloc] initWithFrame:CGRectMake(10.0f, cell.frame.size.height - 1.0f, 300.0f, 1.0f)];
        NSLog(@">>>>>>>>>>>>>>>> %f", cell.frame.size.height);
        [seperateLine setBackgroundColor:[UIColor grayColor]];
        [cell.contentView addSubview:seperateLine];
        [seperateLine release];
    }

    //...
}

我尝试检查cell.frame.size.height,最后是44。然后,我替换了

UIView * seperateLine = [[UIView alloc] initWithFrame:CGRectMake(10.0f, cell.frame.size.height - 1.0f, 300.0f, 1.0f)];

UIView * seperateLine = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 31.0f, 300.0f, 1.0f)];

它作为上面显示的第一张图片。但the cell's height was still 44,他们(我们完全看不到)商品仍然重叠。我所做的只是在separate line位置y处添加了32,但其总高度为44


那么你怎么看待这个? :吗

2 个答案:

答案 0 :(得分:3)

<强>问题:

根据苹果公司的HIG,默认可点击区域是44,所以默认情况下所有控件都有44个高度。

中定义新的UITableViewCell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

默认情况下为44,您在UITableViewCell的框架中不进行任何更改并将其返回。

<强>解决方案:

尝试设置UITableViewCell的帧大小,即cell.frame = CGRectMake(0.0f, 0.0f, 320.0f, 32.0f)

答案 1 :(得分:2)

请参阅documentation并查找tableView:heightForRowAtIndexPath:委托方法。使用它可以为每一行设置高度。它可以是固定的,也可以是动态的,也可以根据您的要求。

希望它有所帮助。