iOS UITableView 自动调整单元格大小并带有部分索引

标签 ios uitableview indexing cell autoresize

我有一个应用程序,可以在表格 View 中加载一个大的 plist 文件。该 plist 文件是一本书。它包含章节和行。每行的长度根据行的长度而不同,因此我需要自动调整单元格的大小。

我正在使用 Storyboard和标准表格 View 和单元格。单元格style=基本并且单元格标签设置为text=plainlines=0linebreaks=wordwrap

到目前为止,将单元格高度调整到适当的大小没有问题。由于单元格高度是在文本插入标签之前定义的,因此我们必须通过众所周知的使用 CGsize 的方法来完成它,我就是这样做的(工作正常)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:
      (NSIndexPath*)indexPath
{
    NSUInteger section = [indexPath section];
    NSString *key = [chapters objectAtIndex:section];
    NSArray *linesSection = [lines objectForKey:key];
    NSString* theText =  [linesSection objectAtIndex:indexPath.row];

    int labelWidth = LW_CHAPTERINDEX_10;
    if (chapters.count < 100){
        if (chapters.count < NB_MIN_CHAP){
            labelWidth = LABELWIDTH;
        } else {
            labelWidth = LW_CHAPTERINDEX_10;
        }
    }

    CGSize textSize = [theText sizeWithFont:[UIFont systemFontOfSize:14]
        constrainedToSize:CGSizeMake(labelWidth, MAXFLOAT) 
        lineBreakMode:UILineBreakModeWordWrap];

    return textSize.height;
}

问题是根据索引进行硬编码。目前我有 3 种可能性。

  • 没有索引
  • 数字低于 10 的索引
  • 数字低于 100 的索引

在代码中这部分

int labelWidth = LW_CHAPTERINDEX_10;
if (chapters.count < 100){
    if (chapters.count < NB_MIN_CHAP){
        labelWidth = LABELWIDTH;
    } else {
        labelWidth = LW_CHAPTERINDEX_10;
    }
}

是根据 3 种可能性进行硬编码。

我发现这样做很奇怪,特别是如果苹果将开始提供更多不同的屏幕尺寸。

问题

如何在运行时获取索引宽度以确定我的标签宽度?

例如,我想编写类似 screen.width - index-width 的程序来获取标签宽度。

或者任何其他应该允许它是动态的并且不再静态硬编码的。

最佳答案

不幸的是,没有(标准)方法可以直接访问部分索引 subview 。但是,您可以使用计算文本的 CGSize 的方法来动态确定节索引的宽度。

您可以预先确定 sectionIndexTitlesForTableView: 返回的所有可能的字符串,并计算必要的大小,也许可以在左右填充一些额外的像素。也许有必要做一些实验来确定正确的字体和大小。

现在您使用诸如 screenSize.width - textSize.width - 2*PADDING 之类的方法应该是可行的。现在唯一的硬编码是填充,当引入新的屏幕尺寸时,它不应该破坏东西。

关于iOS UITableView 自动调整单元格大小并带有部分索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12510750/

相关文章:

iphone - 在距当前位置约 10 公里的 MKMapView 上绘制图钉

ios - Shell脚本调用错误命令/bin/sh失败,在Xcode 9中退出代码为1

ios - 我想创建自定义表格 View 分隔符,UIlabel 位于两个表格 View 单元格之间,就像 iOS 的日历应用程序

PHP:如何将变量动态分配到数组中

ios - 从 NSDate 获取错误的字符串值

iphone - 如何在应用程序中检测免打扰模式?

iphone - 调用 SQLite 数据库更新 UITableView

ios - UITableView 不填充 UITabBarController 内的自定义单元格

database-design - 是否有创建适当数据库索引的策略?

c#索引文本文件的简单方法