Iphone 找出矩形中字体字符串的行数?
我想知道当设置为矩形内的字体时,字符串将有多少行。有办法做到这一点吗 我有这段代码,但我正试图让它处理得更快一点,因为它在滚动视图中被大量使用:Iphone 找出矩形中字体字符串的行数?,iphone,objective-c,ios,uitextview,Iphone,Objective C,Ios,Uitextview,我想知道当设置为矩形内的字体时,字符串将有多少行。有办法做到这一点吗 我有这段代码,但我正试图让它处理得更快一点,因为它在滚动视图中被大量使用: CGSize maximumSize = CGSizeMake(MESSAGE_FRAME.size.width - 16, 1000000); CGSize expectedSize = [message sizeWithFont:[UIFont fontWithName:@"Crimson" size:15]
CGSize maximumSize = CGSizeMake(MESSAGE_FRAME.size.width - 16, 1000000);
CGSize expectedSize = [message sizeWithFont:[UIFont fontWithName:@"Crimson" size:15]
constrainedToSize:maximumSize
lineBreakMode:UILineBreakModeWordWrap];
return expectedSize.height;
我知道这个返回线高度:
NSLog(@"%f", [[UIFont fontWithName:@"Crimson" size:15] lineHeight]);
因此,如果我能将它乘以另一个值,它可能会更快。我想不出替代方法,我怀疑是否有一种方法会更有效(毕竟,有什么可能的魔法可以达到行计数并避免换行计算?) 不管怎样,不要伤害我们的大脑,而是在计算过程中刮除循环,考虑是否需要在视图滚动时反复进行。我猜不是
我认为加快这一速度的方法是进行传统的大小计算并缓存结果。我不知道有什么不同的方法,但我有一个小建议,我在表视图的类似情况下做过。如果您的数据存储在某个地方(在我的例子中,我从网络接收文本并将其存储在数据库中),我仅在第一次接收文本时使用这种方法计算大小,然后存储此答案。加载数据时,我将大小放入数组中,以便快速检索值 只是一个建议,我希望它能帮助您。对于iOS7及更高版本,请使用TextKit:
func numberOfLinesForString(string: String, size: CGSize, font: UIFont) -> Int {
let textStorage = NSTextStorage(string: string, attributes: [NSFontAttributeName: font])
let textContainer = NSTextContainer(size: size)
textContainer.lineBreakMode = .ByWordWrapping
textContainer.maximumNumberOfLines = 0
textContainer.lineFragmentPadding = 0
let layoutManager = NSLayoutManager()
layoutManager.textStorage = textStorage
layoutManager.addTextContainer(textContainer)
var numberOfLines = 0
var index = 0
var lineRange : NSRange = NSMakeRange(0, 0)
for (; index < layoutManager.numberOfGlyphs; numberOfLines++) {
layoutManager.lineFragmentRectForGlyphAtIndex(index, effectiveRange: &lineRange)
index = NSMaxRange(lineRange)
}
return numberOfLines
}
func numberOfLinesForString(string:string,size:CGSize,font:UIFont)->Int{
让textStorage=NSTextStorage(字符串:字符串,属性:[NSFontAttributeName:font])
让textContainer=NSTextContainer(大小:size)
textContainer.lineBreakMode=.ByWordWrapping
textContainer.maximumNumberOfLines=0
textContainer.lineFragmentPadding=0
让layoutManager=NSLayoutManager()
layoutManager.textStorage=textStorage
layoutManager.addTextContainer(textContainer)
var numberOfLines=0
var指数=0
变量lineRange:NSRange=NSMakeRange(0,0)
对于(;索引
expectedSize.height/font lineHeight是否为您提供了合理的结果?