ios - link - nsmutableattributedstring swift
¿Cómo obtener NSAttributedString de CGSIZE para UITextView? (3)
Estoy creando una aplicación para el lector utilizando UITextView
y NSAttributedString
. Necesito dividir toda la cadena atribuida en una cantidad menor de cadena atribuida para habilitar el concepto de Pages.
Tengo un método para calcular el tamaño del cuadro de la cadena atribuida dada.
CGRect rect = [attrString boundingRectWithSize:CGSizeMake(768, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
Pero necesito obtener attributeString para (768, 1024) ContentSize.
He usado esto, pero los atributosSignados no están divididos correctamente, ya que contiene NSTextAttachment
y HTML
.
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)delegate.attributedString);
¿Cómo puedo calcular esto? y tiene que ser rápido y necesita una pequeña cantidad de memoria.
Puede utilizar la función sizeThatFits:
[textView sizeThatFits:CGSizeMake(768, 1024)]
Si desea dividir el texto entre «páginas», debe usar las capacidades de las NSLayoutManager
y NSTextContainer
. Básicamente, debe crear una instancia de NSTextContainer
para cada página que desee mostrar, utilizando el inicializador initWithSize:
Luego registra esos contenedores utilizando -[NSLayoutManager addTextContainer:]
.
Aquí está la documentación relevante: https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html#//apple_ref/doc/uid/TP40009542-CH4-SW35
Si desea saber el tamaño de un UITextView
no debe preguntar el texto delimitador, ya que no es el tamaño de la vista. UITextView
contiene relleno y debe tenerlo en cuenta.
La forma mejor y más fácil es llamar a sizeToFit
en la vista de texto justo después de agregar el texto. Más tarde solo pide el marco UItextView
.