ios - 如何在 iOS 中创建多行表格单元格?

标签 ios ios4 uitableview

如何让第二个单元格展开以适合文本而不是缩放文本?在 iOS 中是否有内置的方法来执行此操作,还是我必须想出一些自制的解决方案?如果您在 iOS 联系人应用程序中查看,则会有一个类似这样的地址框。我找不到如何实现这个。

Table screenshot


对于任何希望在未来实现这一目标的人,这里是我的解决方案的代码:

头文件:

#define FONT_SIZE 22.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 5.0f

实现文件:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.section == 0 && indexPath.row == 1) {

        NSString *text = [atmAnnotation address];

        CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

        CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
        NSLog(@"Size for address is Height:%f Width:%f",size.height,size.width);

        CGFloat height = MAX(size.height, 44.0f);

        return height + (CELL_CONTENT_MARGIN * 2);  

    }
    return 44.0f;
}

结果截图如下:

UITableView fixed

最佳答案

不幸的是,您将不得不自己实现此功能。您需要使用多种方法和回调来计算行和标签的高度。如果您需要一些入门帮助,我可以修改此答案以包含一些示例代码。否则,我确信 SO 或 Google 上有一些相关问题可以帮助您入门。然而,总而言之:

  • UITableViewDelegate 方法 -tableView:heightForRowAtIndexPath: 中确定行的高度。您可能需要使用 NSString UIKit Addition methods计算给定字体大小的字符串的高度等。从此委托(delegate)方法返回正确的高度。
  • 确保您的标签(在 IB 中或以编程方式配置)设置为使用多行。如果将 numberOfLines 设置为 0,标签将根据需要使用尽可能多的行。
  • -tableView:cellForRowAtIndexPath:UITableViewDataSource 实现中,您需要使用与之前相同的逻辑来确定标签的框架。设置您想要的文本,然后更改框架,使标签足够高,刚好能容纳所有文本。

关于ios - 如何在 iOS 中创建多行表格单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951731/

相关文章:

iphone - 编辑开始后关闭 UISearchBar 中的范围栏

iphone - 核心电话框架在 4.0 中部分公开

javascript - 向网格的每个单元格添加监听器

ios - 在不打开 ViewController 的情况下订阅 NotificationCenter

iphone - 在 Obj C 中使用 Brad Larson GPUImage 为照片创建素描效果

iphone - 在特定时间后终止在后台运行的应用程序?

ios - 从 Alamofire 和 SwiftyJSON 填充分组表

ios - UITableViewCell 中的 UIActivityIndi​​catorView(微调器)无法通过 UITableViewController 快速启动动画

iOS - 将两个视频合并为一个带音频的视频文件

ios - 带有 Xcode 5.1 + 的 XcodeColors 在 iOS 开发中崩溃