【问题标题】:UITextView number of lines iOS 7UITextView 行数 iOS 7
【发布时间】:2013-10-01 18:11:37
【问题描述】:

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

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

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

【问题讨论】:

标签: ios objective-c ios7


【解决方案1】:

你可以使用这样的东西。它的性能很低,但这是我到目前为止所能想到的。

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

【讨论】:

  • 这只计算换行,而不是换行,除非你的 UITextView 太宽以至于没有发生换行。
  • 在考虑换行时如何获得行数?
【解决方案2】:

您可以使用 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)

【讨论】:

  • @JasonTyler 我想知道为什么在我的测试中有额外的一行。不过,很高兴它对你有用。
  • 您可能正在 iPhone 6+ 上进行测试,对吧? @mattsven?
【解决方案3】:

您可以将 String 和 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多