Ну, чтобы получить количество строк, все, что вам нужно сделать, это взять вашу строку и использовать sizeWithFont:constrainedToSize:
, а затем разделить высоту на свойство lineHeight вашего UIFont вашего ярлыка.
Что касается получения отдельных строк, я не уверен, есть ли способ сделать это с Objective-C, поэтому вам, возможно, придется использовать Core Text.
Создайте NSAttributedString из вашей строки.
Установить шрифт.
Создайте CTFrameSetter из NSAttributedString
Создание CTFrame
Получить CFArrayRef строк из CTFrame, используя CTFrameGetLines
Перечислите через массив и найдите ваше слово.
Если вы используете быстрое перечисление, то вам понадобится счетчик для отслеживания номера строки.
Пример части разрыва строки:
CTFontRef myFont = CTFontCreateWithName([font fontName], [font pointSize], NULL);
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:string];
[attStr addAttribute:(NSString *)kCTFontAttributeName value:(id)myFont range:NSMakeRange(0, attStr.length)];
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attStr);
CGPathRef path = [[UIBezierPath bezierPathWithRect:textFrame] CGPathRef];
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL);
NSArray *lines = (NSArray *)CTFrameGetLines(frame);
Вам нужно будет добавить соответствующие выпуски в зависимости от того, используете вы ARC или нет.
Обратите внимание, что переменная "font" является UIFont. Если вы хотите создать шрифт, вам не нужно использовать эти методы fontName и pointSize.
Также обратите внимание: это массив объектов CTLineRef. Используйте CTLineGetStringRange
, чтобы получить CFRange всей линии. Затем используйте его, чтобы создать подстроку из NSString для поиска в.
NSUInteger idx = 0;
for (CTLineRef line in lines) {
CFRange lineRange = CTLineGetStringRange(line);
NSRange range = NSMakeRange(lineRange.location, lineRange.length);
NSString *lineString = [string substringWithRange:range];
NSRange searchResultRange = [lineString rangeOfString:@"hello"];
if (searchResultRange.location != NSNotFound) {
// MATCH!
break;
}
idx++;
}