我有一个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在顶部也有一个空白单元格,因此我可以将第一个具有行号的单元格与文本的第一行对齐。
我尝试了多种方法来解决间距问题,但似乎没有一种方法可以解决该问题。任何帮助将不胜感激。
最佳答案
我相信问题在于传递给sizeWithFont的大小。您正在将宽度设置为textView的宽度。这实际上有点太宽了。文本视图实际上有一点空白。尝试从宽度中减去一些点。另外,您要处理的是属性文本,而不是纯字符串。您应该查看用于计算NSAttributedString的高度的方法。
您发布的代码中的最后一件事。您将在每次调用heightForRowAtIndexPath:时拆分_codeView.text。那很糟。您应该这样做一次并保存字符串。这种方法被称为很多。那是很多多余的字符串分割。