2014-01-26 46 views
0

我使用下面的方法:UITextView行计数包括空白行?

- (void)textViewDidChange:(UITextView *)textView { 
    int numLines = self.textInputView.contentSize.height/self.textInputView.font.lineHeight; 
    NSLog(@"number of lines is %i", numLines); 
} 

这将返回行大多正确计算除少数边缘情况。

问题是,当我按下键盘上的“Return”键时,textView中会启动一个新的空白行,但行数不包含此项。输入第一个字符后,它将被计数。当退格时,它也不会给出正确的计数,直到您删除或添加上一行中的单个字符为止。

有没有一种方法可以准确获得线数?谢谢

回答

1

这不是一个稳定的方式来获得行数。字体的'lineHeight'并不总是textView将用作其行高度的东西。

相反,得到了UITextView’slayoutManager,并使用穿过的layoutManager文本的运行步骤:

- (CGRect)lineFragmentRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange; 

如果你调用一个循环,方法,在glyphIndex 0,说明每一次传递结束以前的effectiveGlyphRange作为新的glyphIndex,你会得到所有已经布置的文本的矩形,一个接一个。你不会只想计算有多少,因为每行可以有多个,但是你可以将这些信息拼凑成多少行。

应该有一种更简单的方法,我知道。也许有,我从来没有学过它!