Подтвердить что ты не робот

Как обернуть текст вокруг вложений с помощью текстового набора iOS7?

Я использую новый API текстового набора для добавления вложений в некоторый атрибут текста:

// 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];

Это отлично работает, я вижу, как изображение выводится на выходе. Однако я не могу найти способ указать выравнивание изображения или обернуть текст вокруг изображения.

Любые идеи?

ПРИМЕЧАНИЕ. Текстовые вложения отличаются от путей исключений - текстовое вложение является частью "модели", т.е. является частью атрибутной текстовой строки, которую диспетчер компоновки выполняет. В то время как путь исключения является частью представления.

4b9b3361

Ответ 1

NSTextAttachments рассматриваются как один символ с помощью NSAttributedString. Таким образом, чтобы настроить их выравнивание, вы должны сделать это так же, как и для текста. Мне потребовалось несколько часов, чтобы поиграть с attachment.bounds (который я никогда не мог нормально работать), чтобы наконец понять это. Здесь приведен пример горизонтального выравнивания NSTextAttachment.

#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])];

После этого вы добавите imageAttrString к существующей атрибутной строке и, возможно, добавите другую после нее. Одна из причуд заключается в том, что, поскольку вложение является персонажем, оно не рассматривается как его собственный абзац. Для этого вам необходимо окружить его \n (символы новой строки). Просто добавьте их к обеим сторонам прикрепленной строки привязки.

Надеюсь, что это поможет, мне потребовались годы, чтобы понять.

Ответ 2

Попробуйте установить для свойства bounds размер изображения.

Определяет границы компоновки графического представления получателя в текстовой системе координат.

Итак, это должно быть:

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

Ответ 3

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

измените yPadding, в котором вы нуждаетесь.
Он может быть отрицательным, если высота изображения больше высоты строки.