2015-04-15 5 views
18

Ich erstelle eine Reader-App mit UITextView und NSAttributedString, ich muss ganze attributedString in kleinere Menge der attributierten Zeichenfolge aufgeteilt werden, um Pages Concept zu aktivieren.Wie bekomme ich NSAttributedString von CGSIZE für UITextView?

Ich habe Methode zur Berechnung der Rahmengröße der angegebenen attributierten Zeichenfolge.

 CGRect rect = [attrString boundingRectWithSize:CGSizeMake(768, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; 

Aber ich muss attributeString für (768, 1024) ContentSize bekommen.

Ich habe dies verwendet, aber die attributedStrings sind nicht korrekt unterteilt, weil es NSTextAttachment und HTML Stiche enthält.

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)delegate.attributedString); 

Wie kann ich das berechnen? und es muss schnell sein und braucht eine kleine Menge an Speicher.

Antwort

7

Wenn Sie die Größe eines UITextView wissen möchten, sollten Sie nicht die umgebende rect des Textes fragen, weil es nicht die Größe der Ansicht ist. UITextView enthält Padding und das müssen Sie berücksichtigen.
Der beste und einfachere Weg ist es, sizeToFit in der Textansicht direkt nach dem Hinzufügen des Textes aufzurufen. Fragen Sie später nach dem UItextView Rahmen.

+0

Eigentlich habe ich größeren Text mit zugeschrieben Text, HTML-Tabellen und NSTextAttachment. Ich möchte den Text in mehrere kleine Texte aufteilen (die in Rahmengröße 768X1024 passen), also wie kann ich den Text teilen? – Manimaran

+0

Ich denke, dass Sie den Titel Ihrer Frage aktualisieren sollten. Ich hatte nie die Chance, ein ähnliches Problem zu lösen. Wahrscheinlich müssen Sie in CoreText eintauchen oder wenn Sie> = iOS7 bereitstellen, versuchen Sie TextKit und NSLayoutManager zu verwenden, hier ein Startpunkt http://www.objc.io/issue-5/getting-to-know-textkit.html. Durch die Angabe von rect mit der Größe wird immer eine ungefähre Bewertung der Größe der Textansicht angezeigt. – Andrea

+0

Ich habe meinen Titel geändert. In der Verbindung, die Sie gegeben haben, sind sie nicht mit meinem Problem beschäftigt – Manimaran

2

können Sie verwenden UITextView Funktion sizeThatFits:

[textView sizeThatFits:CGSizeMake(768, 1024)] 
2

Wenn Sie Text zwischen «Seiten» teilen möchten, dann müssen Sie die Fähigkeiten des NSLayoutManager und die NSTextContainer Klassen verwenden. Grundsätzlich müssen Sie eine NSTextContainer Instanz für jede Seite, die Sie anzeigen möchten, mit dem Initialisierer initWithSize: erstellen. Dann registrieren Sie diese Container mit -[NSLayoutManager addTextContainer:].

Hier ist die entsprechende Dokumentation: https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html#//apple_ref/doc/uid/TP40009542-CH4-SW35

+0

Ich habe das versucht, dauert es zu lange Zeit und es erhöht den Speicher auch. Weil ich sehr großes Dokument habe – Manimaran

+0

Nun, ich denke, Sie stecken fest mit der CoreText API beim Ausgleich für die Anhänge irgendwie. Je nachdem, wie Sie Ihre Benutzeroberfläche darstellen möchten, müssen Sie träge Algorithmen verwenden und vorhandene Ansichten wiederverwenden. – Dalzhim

+0

Ich verwende die vorhandenen Ansichten ('UITextView') und ich habe' NSAttributedString' aus einem langen Dokument. Es besteht aus Bildern ('NSTextAttachment' und' HTML' Tabellen). Zur Zeit teile ich attributedString in mehrere Seiten mit einer Größe von 768X1024 mit 'CTFramesetterCreateWithAttributedString', aber es gibt keine exakte Ausgabe (gibt mehr Leerzeichen und beschnittene Texte) – Manimaran

Verwandte Themen