La forma en que lo haría es calcular todos los tamaños de cada párrafo. Con sizeWithFont: constrainedToSize: lineBreakMode:
podrá entonces determinar qué párrafo es visible desde [textView contentOffset].
para desplazarse, no use scrollRangeToVisible, simplemente use setContentOffset: El parámetro CGPoint y para esto debe ser la suma de todos los tamaños de altura hasta el siguiente párrafo, o simplemente agregue el textView.frame.size.height, si eso está más cerca que el comienzo del siguiente párrafo.
Esto tiene sentido?
en respuesta a petición de éstos Comentario Código de abajo (no probado):
CGFloat paragraphOffset[MAX_PARAGRAPHS];
CGSize constraint = CGSizeMake(widthOfTextView, 999999 /*arbitrarily large number*/);
NSInteger paragraphNo = 0;
CGFloat offset = 0;
for (NSString* paragraph in paragraphs) {
paragraphOffset[paragraphNo++] = offset;
CGSize paragraphSize = [paragraph sizeWithFont:textView.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
offset += paragraphSize.height;
}
// find visible paragraph
NSInteger visibleParagraph = 0;
while (paragraphOffset[visibleParagraph++] < textView.contentOffset.y);
// scroll to paragraph 6
[textView setContentOffset:CGPointMake(0, paragraphOffset[6]) animated:YES];
¿Puedes darnos algún código de ejemplo? No estoy seguro de cómo sizeWithFont: constrainedToSize: lineBreakMode: funciona, ¿qué es para constrainedToSize: argument? –
añadió el código anterior. Los párrafos FYI son un NSArray de las cadenas de párrafo –
. Tenga en cuenta que puede reemplazar el 9999999 por FLT_MAX (variable de iPhone predeterminada para un valor grande) – Niko