UITextView,行号未对齐

时间:2012-10-12 02:38:03

标签: objective-c ios nsstring uitextview

我有一个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顶部还有一个空白单元格,因此我可以将第一个单元格与第一行文本的行号对齐。

我尝试了多种间距播放方法,但似乎没有一种方法可以解决这个问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我对你的要求感到有点困惑。

你是说你有文字,然后是旁边的一个桌面视图,你试图将两者排成一行吗?