UITextView行数iOS 7

在iOS 6中,我使用这段代码来获取UITextView的行数:

 int numLines = textView.contentSize.height / textView.font.lineHeight; 

但是这在iOS 7中不起作用。我如何获得iOS 7中UITextView的总行数?

你可以使用这样的东西。 这是低性能,但这是我可以直到现在的数字。

 NSString *string=textView3.text; NSArray *array=[string componentsSeparatedByString:@"\n"]; NSLog(@"%d",array.count); 

你可以用UITextView的UITextInputTokenizer / UITextInput协议方法来做到这一点。

 id<UITextInputTokenizer> tokenizer = textView.tokenizer; UITextPosition *pos = textView.endOfDocument; int lines = 0; while (true){ UITextPosition *lineEnd = [tokenizer positionFromPosition:pos toBoundary:UITextGranularityLine inDirection:UITextStorageDirectionBackward]; if([textView comparePosition:pos toPosition:lineEnd] == NSOrderedSame){ pos = [tokenizer positionFromPosition:lineEnd toBoundary:UITextGranularityCharacter inDirection:UITextStorageDirectionBackward]; if([textView comparePosition:pos toPosition:lineEnd] == NSOrderedSame) break; continue; } lines++; pos = lineEnd; } //lines--; // Compensation for extra line calculated (??) 

( GIST )

您可以将String和textView传递给此方法,即使用户按下新行,它也将返回此textview中的当前数字行:

 -(int)numberOfRows:(NSString *)string inView:(UITextView*)txtView { CGSize maximumLabelSize = CGSizeMake(MAXFLOAT , MAXFLOAT); NSStringDrawingOptions options = NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin; NSString *new = [string stringByReplacingOccurrencesOfString: @"\n" withString:@" "]; NSDictionary *attr = @{NSFontAttributeName: [UIFont fontWithName:urFont size:urSize]}; CGRect bounds = [new boundingRectWithSize:maximumLabelSize options:options attributes:attr context:nil]; CGSize viewSize = bounds.size; int row = floor(txtView.contentSize.height / viewSize.height ) ; return row; }