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

Posted

技术标签:

【中文标题】当我为 UITableView 设置 rowHeight 时,单元格的高度不应该也改变吗?【英文标题】:When I set the rowHeight for UITableView, shouldn't the height of cell changed as well? 【发布时间】:2011-12-13 13:15:41 【问题描述】:

问题:当我将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 行:

好像选中前cell的高度是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,它们(我们完全看不到)仍然重叠。我所做的只是在y 位置为32 但其总高度为44 的位置添加了一个separate line


那么您对此有何看法? :?

【问题讨论】:

默认行高是 44 磅是有原因的:这是人类手指的近似大小。如果你让行小于这个值,我希望你不要指望用户点击它们。 @PeterHosey 谢谢你的建议! :) 【参考方案1】:

问题:

根据苹果的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)

【讨论】:

妈妈,这应该可以!谢谢!还有一个新问题:为什么if (cell == nil) ...下面的NSLog(@"%@", cell.frame.size.height);打印为NULL,而不是32 你在设置frame之前放了NSLog()吗? 不是,我设置后放的。 :? 设置框架后放置 不再重要了,但是 %@ 假定一个对象,而高度是一个 int,所以你需要 %d【参考方案2】:

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

希望对您有所帮助。

【讨论】:

我也实现了这个委托方法..并将值返回到 32.0f。

以上是关于当我为 UITableView 设置 rowHeight 时,单元格的高度不应该也改变吗?的主要内容,如果未能解决你的问题,请参考以下文章

当单元格获得自定义高度时如何自定义 UITableView 分隔符

UITableView 框架

ios UITableView设置tableHeaderView时发生约束错误 UIView-Encapsulated-Layout-Height UIView-Encapsulated-Layout

指定表格页脚时,最后一个单元格上的uitableview分隔符丢失

为啥当我为我的 CABasicAnimation 设置低持续时间值时它会跳跃?

当我为给定的 dtype 设置太大的值时会发生啥?