Adición de routes de exclusión a múltiples vistas de text

Estoy intentando agregar múltiples routes de exclusión a una serie de UITextView s dispuestas sucesivamente en un UIScrollView , así:

 while (lastRendenetworkingGlyph < self.manager.numberOfGlyphs) { CGRect textViewFrame = CGRectMake(currentXOffset, 10, width / 2, height - 20); CGSize columnSize = CGSizeMake(CGRectGetWidth(textViewFrame) - 20, CGRectGetHeight(textViewFrame) - 10); NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize]; [self.manager addTextContainer:textContainer]; UITextView *textView = [[UITextView alloc] initWithFrame:textViewFrame textContainer:textContainer]; textView.scrollEnabled = NO; textView.editable = NO; textView.dataDetectorTypes = UIDataDetectorTypeAll; textView.delegate = self; textView.selectable = YES; UIImageView *goat = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"goat"]]; [goat setContentMode:UIViewContentModeScaleAspectFit]; goat.frame = CGRectMake(0.0, 0.0, 50.0, 50.0); [textView addSubview:goat]; [self.scrollView addSubview:textView]; textView.textContainer.exclusionPaths = @[[UIBezierPath bezierPathWithRect:CGRectMake(0.0, 0.0, 50.0, 50.0)]]; currentXOffset += CGRectGetWidth(textViewFrame); lastRendenetworkingGlyph = NSMaxRange([self.manager glyphRangeForTextContainer:textContainer]); } 

Sin embargo, esto hace que la aplicación se congele, y he rastreado el problema a la configuration de la ruta de exclusión en cada NSTextContainer . Por ejemplo, si no establezco routes de exclusión, funciona bien. Es importante destacar que si solo establezco la ruta de exclusión en el primer NSTextContainer , todo funciona bien, pero todo está por encima de uno, y la aplicación se congela. ¿Qué estoy haciendo mal o es un error?

Supongo que, en retrospectiva, esto es obvio, pero la solución a la que llegué es agregar routes de exclusión a cada nuevo NSTextContainer justo después de asignar el contenedor, pero antes de hacer cualquier otra cosa. es decir

 NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize]; textContainer.exclusionPaths = @[exclusionPath]; [manager addTextContainer: textContainer]; 

más bien que:

 NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize]; [manager addTextContainer: textContainer]; textContainer.exclusionPaths = @[exclusionPath]; 

lo que hace que la aplicación deje de responder.

Simple cuando sabes cómo. Esto solo se aplica a los layouts de varias columnas y páginas múltiples en los que está creando múltiples contenedores de text y vistas y dividiendo los glifos para que se ajusten correctamente. Si solo agrega una ruta de exclusión a una vista, parece que puede agregar la ruta de exclusión en cualquier lugar.

Esto es muy fácil y útil para ImageWrapping en RichText. pero uno debe tener en count la cosa. Hace un día probé este y encontré el mismo código funcionando de manera diferente para iOS 7.0 y iOS 7.1

El cursor parpadeante de TextView aparece en un lugar diferente hasta que no hay text en UITextView.

Escribí este código.

 UIBezierPath* exclusionPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 38, 21)]; _txtViewMessage.textContainer.exclusionPaths = @[exclusionPath]; 

y el resultado encontrado en iOS 7.1 y iOS 7.0

Left One: iOS 7.0 y Right One: iOS 7.1