J'essaie d'obtenir l'effet suivant en utilisant un UITextView:
Fondamentalement, je veux insérer une image entre le texte. L'image peut simplement occuper 1 rangée d'espace, donc aucun emballage n'est nécessaire.
J'ai simplement essayé d'ajouter un UIView à la sous-vue:
UIView *pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[pictureView setBackgroundColor:[UIColor redColor]];
[self.textView addSubview:pictureView];
Mais il semble flotter sur le texte et le recouvrir.
J'ai fait un peu de lecture sur les chemins d'exclusion qui semblent être une façon de mettre en œuvre cela. Cependant, je ne veux pas positionner absolument l'image - au lieu de cela, elle devrait suivre le texte (similaire à la façon dont <span>
se comporte en HTML).
Réponses:
Vous devrez utiliser une chaîne attribuée et ajouter l'image comme instance de
NSTextAttachment
:la source
replaceCharactersInRange
Code de @ bilobatum converti en Swift pour ceux qui en ont besoin:
la source
Vous pouvez essayer d'utiliser NSAttributedString et NSTextAttachment. Jetez un œil au lien suivant pour plus de détails sur la personnalisation de NSTextAttachment afin de redimensionner l'image. http://ossh.com.au/design-and-technology/software-development/implementing-rich-text-with-images-on-os-x-and-ios/
Dans mon exemple, je redimensionne l'image pour l'adapter à la largeur, dans votre cas, vous voudrez peut-être redimensionner l'image pour qu'elle corresponde à la hauteur de la ligne.
la source
UIView
en aUIImage
, puis de l'ajouter en tant que fichierNSTextAttachment
. Pour rendre la vue à une image, consultez cette question: http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina- afficher? lq = 1Développement de la réponse de @ bilobatum et utilisation de cette catégorie à partir d'une autre question. J'ai concocté ceci:
Usage:
La mise en oeuvre:
.
la source
UIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName];
enUIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName] ?: [UIFont fontWithName:@"HelveticaNeue" size:12.0];
devrait être mieux, car [attributesForRange valueForKey: NSFontAttributeName] pourrait être nul s'il n'était pas défini dans le dictionnaireLa solution du problème dans un exemple simple est
la source