2

我有一个 UITextView 用来显示文本。在旁边,我有一个 UITableView 用来显示行号。尝试将行号与文本行对齐时会出现问题。这是问题的截图:https ://www.dropbox.com/s/7sjqm4nrsqm6srh/Screen%20Shot%202012-10-11%20at%209.16.58%20PM.png 例如第7行应该下移因为它不在新行的开头。我认为问题必须处理文本换行时的间距,但我不确定。

因此,对于 UITableView,我创建的单元格数量与文本行数相同。然后使用以下方法拉伸单元格,使其高度与每行文本相同:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
int i = indexPath.row;
if (i == 0) {
    return 10;
}

UIFont *font = _codeView.font;

NSArray *strings = [_codeView.text componentsSeparatedByString:@"\n"];
NSString *tempString = [strings objectAtIndex:i-1];

if (([strings objectAtIndex:i-1] == @"\n") | ([[strings objectAtIndex:i-1] length] == 0) ) {
    tempString = @"hi";
}

CGSize stringSize = [tempString sizeWithFont:font constrainedToSize:CGSizeMake(_codeView.bounds.size.width, 9999) lineBreakMode:NSLineBreakByWordWrapping];
CGFloat height = stringSize.height;

return height;
}

_codeView 是我用来显示代码的 UITextView。显示行号的 UITableView 在顶部也有一个空白单元格,因此我可以将第一个单元格与行号与第一行文本对齐。

我尝试了多种使用间距的方法,但似乎都没有解决问题。任何帮助将不胜感激。

4

2 回答 2

1

我相信问题在于您传递给 sizeWithFont 的大小。您正在将宽度设置为 textView 的宽度。这实际上有点太宽了。文本视图实际上有一点边距。尝试从宽度中减去几个点。此外,您正在处理属性文本,而不是纯字符串。您应该查看计算 NSAttributedString 高度的方法。

您发布的代码中的最后一件事。您在每次调用 heightForRowAtIndexPath: 时拆分 _codeView.text:。那很糟。您应该这样做一次并保存字符串。这种方法被称为很多。那是很多冗余的字符串拆分。

于 2012-10-12T02:51:58.037 回答
0

我对你在问什么感到有点困惑。

您是说您有文本,然后是旁边的表格视图,并且您正在尝试将两者对齐吗?

于 2012-10-12T02:45:22.953 回答