Ich versuche, mit UITextView den folgenden Effekt zu erzielen:
Grundsätzlich möchte ich ein Bild zwischen Text einfügen. Das Bild kann einfach nur 1 Zeile Platz einnehmen, sodass keine Umhüllung erforderlich ist.
Ich habe versucht, der Unteransicht nur eine UIView hinzuzufügen:
UIView *pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[pictureView setBackgroundColor:[UIColor redColor]];
[self.textView addSubview:pictureView];
Aber es scheint über den Text zu schweben und ihn abzudecken.
Ich habe ein wenig über Ausschlusspfade gelesen , was eine Möglichkeit zu sein scheint, dies zu implementieren. Ich möchte das Bild jedoch nicht unbedingt positionieren, sondern es sollte mit dem Text fließen (ähnlich wie <span>
in HTML).
Antworten:
Sie müssen eine zugewiesene Zeichenfolge verwenden und das Bild als Instanz hinzufügen von
NSTextAttachment
:quelle
replaceCharactersInRange
Der Code von @ bilobatum wurde für Bedürftige in Swift konvertiert:
quelle
Sie können versuchen, NSAttributedString und NSTextAttachment zu verwenden. Weitere Informationen zum Anpassen des NSTextAttachment, um die Größe des Bildes zu ändern, finden Sie unter folgendem Link. http://ossh.com.au/design-and-technology/software-development/implementing-rich-text-with-images-on-os-x-and-ios/
In meinem Beispiel passe ich die Größe des Bilds an die Breite an. In Ihrem Fall möchten Sie möglicherweise die Größe des Bildes an die Linienhöhe anpassen.
quelle
UIView
zu einem zu rendernUIImage
und es dann als hinzuzufügenNSTextAttachment
. Um die Ansicht zu einem Bild zu rendern, überprüfen Sie diese Frage: http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina- Anzeige? lq = 1Erweitern Sie die Antwort von @ bilobatum und verwenden Sie diese Kategorie aus einer anderen Frage. Ich habe mir das ausgedacht:
Verwendung:
Implementierung:
.
quelle
UIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName];
inUIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName] ?: [UIFont fontWithName:@"HelveticaNeue" size:12.0];
sollte besser sein, da [attributeForRange valueForKey: NSFontAttributeName] möglicherweise null ist, wenn es nicht im Wörterbuch festgelegt wurdeProblemlösung im einfachen Beispiel ist
quelle