gpt4 book ai didi

iOS UITableView AutoSizing Cell with Section Index

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:48 26 4
gpt4 key购买 nike

我有一个应用程序,我在其中将一个大的 plist 文件加载到一个 TableView 中。这个 plist 文件就像一本书。它包含章节和行。每行都有不同的长度,具体取决于行的长度,因此我需要自动调整单元格的大小。

我正在使用 Storyboard和标准表格 View 和单元格。单元格style=基本且单元格标签设置为文本=普通行=0 换行符=自动换行

至此,将单元格高度调整为合适的大小没有问题。由于单元格高度是在文本插入标签之前定义的,我们必须通过使用 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 AutoSizing Cell with Section Index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12510750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com