Я пытаюсь получить следующий эффект с помощью UITextView:
В основном я хочу вставить изображение между текстом. Изображение может занимать только 1 строку, поэтому нет необходимости в переносе.
Я попытался просто добавить UIView в подпредставление:
UIView *pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[pictureView setBackgroundColor:[UIColor redColor]];
[self.textView addSubview:pictureView];
Но кажется, будто он плывет по тексту и закрывает его.
Я немного прочитал о путях исключения, которые, похоже, являются одним из способов реализации этого. Однако я не хочу абсолютно позиционировать изображение - вместо этого оно должно перетекать вместе с текстом (аналогично тому, как это происходит <span>
в HTML).
Ответы:
Вам нужно будет использовать строку с атрибутами и добавить изображение как экземпляр
NSTextAttachment
:источник
replaceCharactersInRange
Код @ bilobatum преобразован в Swift для нуждающихся:
источник
Вы можете попробовать использовать NSAttributedString и NSTextAttachment. Взгляните на следующую ссылку для получения дополнительных сведений о настройке NSTextAttachment для изменения размера изображения. http://ossh.com.au/design-and-technology/software-development/implementing-rich-text-with-images-on-os-x-and-ios/
В моем примере я изменяю размер изображения по ширине, в вашем случае вы можете изменить размер изображения в соответствии с высотой строки.
источник
UIView
в a,UIImage
а затем добавить его какNSTextAttachment
. Чтобы отобразить представление на изображении, ознакомьтесь с этим вопросом: http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina- display? lq = 1Расширяя ответ @ bilobatum и используя эту категорию из другого вопроса. Я приготовил это:
Использование:
Реализация:
.
источник
UIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName];
кUIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName] ?: [UIFont fontWithName:@"HelveticaNeue" size:12.0];
должно быть лучше, потому что [attributesForRange valueForKey: NSFontAttributeName] может быть ноль , если он не был установлен в словареРешение проблемы в простом примере:
источник