2015-04-06 6 views
1

У меня есть UILabel, который будет содержать различные длины текста. Мне нужно поместить изображение в верхнем левом углу текста и обернуть вокруг него текст. Как я могу это сделать? Все, что я мог найти, это использовать UITextView, который я не хочу использовать, поскольку это статический текст.iOS Swift Wrapping Text Around Image

+0

К сожалению, я не вижу способа получить доступ к свойству textcontainer uilable, которое, как я считаю, будет определять пути исключения. Вам просто нужно укусить пулю и использовать uitextview с отключенным пользовательским вмешательством. – user2320861

+0

Обратите внимание на мой ответ. Мне удалось выполнить это, используя NSTextAttachment. – rcat24

+0

Очень удачно, это можно сделать с помощью UITextView: http://stackoverflow.com/a/20033752/294884 – Fattie

ответ

4

Это вполне разумное использование UITextView. Ваши причины для колебаний использовать его неясно. Вы можете сделать UITextView недоступным для редактирования и неизбираемым; пользователь не будет знать, что это UITextView, а не UILabel.

Если вам не нравится это решение, то то, что я хотел бы сделать, это использовать вместо UILabel пользовательский вид, который рисует текст. Вы можете нарисовать текст с помощью текстового набора, и, таким образом, вы можете взять полную информацию о том, как рисует текст. В частности, вы можете заставить его обернуть, как вам нравится, в том числе не рисовать текст в углу (путь исключения в текстовом контейнере).

+0

Это пример пользовательского UIView, который рисует собственный текст, создавая собственный стек Text Kit; он намного сложнее, чем вам нужно (он использует текстовые контейнеры _two_), но он показывает базовую архитектуру: https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch10p543drawingWithTextKit/ch23p815attributedStringDrawing3/StyledText.swift – matt

+0

Да, я не думал об этом достаточно, чтобы отключить взаимодействие с пользователем. Теперь он отлично работает. Благодаря! –

0

Вы можете достичь этого, используя NSTextAttachment и приписываемый текст.

NSMutableAttributedString *myText = [[NSMutableAttributedString alloc] initWithString:labelStr]; 

NSTextAttachment *attachment = [[NSTextAttachment alloc] init] 
attachment.image = yourImage; 
NSAttributedString *attachmentLock = [NSAttributedString attributedStringWithAttachment:attachment]; 
NSMutableAttributedString *lockString = [[NSMutableAttributedString alloc] initWithAttributedString:myText]; 

//set your image range within the text. modify it till you get it right. 
NSRange range = NSMakeRange(0,[labelStr length]); 
[lockString replaceCharactersInRange:NSMakeRange(range.location, 1) withAttributedString:attachmentLock]; 
yourLabel.attributedText = lockString;