2013-09-23 3 views
18

ich den neuen Text Kit API bin mit Attachments zu einem gewissen zugeschrieben Text hinzuzufügen:Wie umschließt man Text mit dem iOS7 Text Kit um Anhänge?

// create an attachment for each image 
NSTextAttachment* ta = [NSTextAttachment new]; 
ta.image = [UIImage imageNamed:@"imageName"]; 

// add to the attributed text string 
NSAttributedString* rep = [NSAttributedString attributedStringWithAttachment:ta]; 
[myAttributedTextString appendAttributedString:rep]; 

Dies funktioniert gut, kann ich mein Bild in der Ausgabe dargestellt sehen. Ich kann jedoch keine Möglichkeit finden, die Bildausrichtung anzugeben oder Text um das Bild zu legen.

Irgendwelche Ideen?

HINWEIS: Textanhänge unterscheiden sich von Ausschlusspfaden - ein Textanhang ist Teil des "Modells", d. H. Er ist Teil der attributierten Textzeichenfolge, auf der der Layoutmanager Textlayout ausführt. Während ein Ausschlusspfad Teil der Ansicht ist.

Antwort

20

NSTextAttachments werden als ein einzelnes Zeichen von NSAttributedString behandelt. Um ihre Ausrichtung anzupassen, müssen Sie also so verfahren, wie Sie es für Text tun würden. Ich habe Stunden damit verbracht, mit attachment.bounds zu fummeln (was ich nie richtig machen konnte), um es endlich herauszufinden. Hier ist ein Beispiel, wie Sie eine NSTextAttachment horizontal ausrichten können.

#def BETWEEN_SECTION_SPACING 10 

// creates a text attachment with an image 

NSTextAttachment *attachment = [[NSTextAttachment alloc] init]; 

attachment.image = [UIImage imageNamed:@"sample_image.jpg"]; 

NSMutableAttributedString *imageAttrString = [[NSAttributedString attributedStringWithAttachment:attachment] mutableCopy]; 



// sets the paragraph styling of the text attachment 

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init] ; 

[paragraphStyle setAlignment:NSTextAlignmentCenter];   // centers image horizontally 

[paragraphStyle setParagraphSpacing:BETWEEN_SECTION_SPACING]; // adds some padding between the image and the following section 

[imageAttrString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [imageAttrString length])]; 

Danach würden Sie imageAttrString an eine bestehende zugeschrieben Zeichenfolge anhängen und vielleicht eine andere anhängen, nachdem es. Eine Besonderheit ist, dass, weil die Anlage ein Zeichen ist, sie nicht als eigener Absatz behandelt wird. Damit dies der Fall ist, müssen Sie es mit \n (Newline-Zeichen) umgeben. Füge sie einfach an beide Seiten der attributierten Zeichenfolge des Anhangs an.

Hoffe, dass hilft, dauerte es Ewigkeiten, um herauszufinden.

+0

Dies ist sehr hilfreich. Danke für das Teilen! – CodePlumber

10

Versuchen Sie, die bounds-Eigenschaft auf die Bildgröße zu setzen.

Definiert die Layoutgrenzen der grafischen Darstellung des Empfängers im Textkoordinatensystem.

So sollte es sein:

ta.bounds = (CGRect) { 0, 0, ta.image.size }; 
+1

Oooooh, schön! Das erlaubt mir endlich, meine Bilder vertikal zu positionieren. – DarkDust

+0

Es funktioniert! Dies sollte die beste Antwort sein. Einfach und gerade – Songlin

1
ta.bounds = (CGRect) { 0, yPadding, ta.image.size }; 

ändern yPadding benötigen Sie.
Es kann negativ sein, wenn die Bildhöhe größer als die Zeilenhöhe ist.