objective-c - UITextView,行号未对齐

标签 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,我创建的单元格数量与文本行数相同。然后使用以下方法拉伸(stretch)单元格,使其高度与每行文本的高度相同:

- (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 的宽度。这实际上有点太宽了。 TextView 实际上有一点边距。尝试从宽度中减去几个点。此外,您正在处理属性文本,而不是纯字符串。您应该查看计算 NSAttributedString 高度的方法。

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

关于objective-c - UITextView,行号未对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12851450/

相关文章:

iphone - 是否允许在单例类中为变量定义属性和综合?

ios - 更新单元格时 UITableViewCell 大小不一致

ios - 如何使用动画 iOS 显示模态视图?

objective-c - 如何使用 Restkit 来 POST JSON 和映射响应

ios - 通用设置中的 iOS 开发者菜单在哪里

string - 如何在 Swift 字符串中包含表情符号?

iphone - 从 NSString 转换为 NSDate(即使你不知道 NSString 格式)

ios - 如何循环 NSString N 次?

iphone - 如何轻松地将 iPhone 应用程序转换为通用应用程序?

ios - 如果应用程序被用户终止,whatsapp 如何显示发送给其他收件人的消息(双 v 图标)