Как я могу горизонтально центрировать одну строку текста в UITextView?

У меня есть UITextView, который отображает достаточное количество текста. Мне нужно горизонтально центрировать некоторые, но не все строки текста в текстовом представлении.

Я попытался установить NSParagraphStyleAttributeName с экземпляром NSParagraphStyle, свойство alignment которого равно NSTextAlignmentCenter в диапазоне строки, которая должна быть центрирована. Я также устанавливаю шрифт, чтобы центральная линия была жирной. Когда я делаю это, используя приведенный ниже код, соответствующая строка выделяется жирным шрифтом, но остается выровненной по левому краю.

if (shouldCenterLine) {
    NSMutableParagraphStyle *centerStyle = [[NSMutableParagraphStyle alloc] init];
    centerStyle.alignment = NSTextAlignmentCenter;
    NSDictionary *attributes = @{NSParagraphStyleAttributeName : centerStyle,
                                 NSFontAttributeName : boldFont};
    [attributedString setAttributes:attributes range:lineRange];
}

Если я применю этот же атрибут стиля абзаца ко всему содержимому текстового представления, текст окажется в центре, как и ожидалось.

Можно ли убедить UITextView центрировать определенные поддиапазоны текста? Является ли единственным решением переход на UIWebView рендеринг сгенерированного HTML? Обратите внимание, что это для приложения, которое все еще поддерживает iOS 6, поэтому, к сожалению, я не могу использовать Text Kit.


person Andrew Madsen    schedule 15.01.2014    source источник
comment
У меня нет опыта в попытке изменить стиль абзаца, но я думаю, что я бы попробовал более широкий диапазон. Какой диапазон вы сейчас используете? Включает ли он возврат строки, который заканчивает строку? Включает ли он возврат строки, с которого начинается строка? Может быть, просто попробуйте добавить несколько символов до и после. Если это все еще не работает, попробуйте выполнить всю строку, просто чтобы убедиться, что она распознает NSTextAlignmentCenter. (Возможно, было бы полезно включить код, который создает lineRange.)   -  person ArtOfWarfare    schedule 15.01.2014
comment
@ArtOfWarfare Спасибо! Пожалуйста, напишите свой комментарий в качестве ответа, чтобы я мог принять его. Расширение lineRange для включения новой строки перед центрируемой строкой (т. е. добавление одного дополнительного символа в начало) устранило проблему.   -  person Andrew Madsen    schedule 15.01.2014
comment
Рад слышать, что помог. Я впервые заглянул на главную страницу StackOverflow и увидел что-то, с чем я мог бы помочь, и никто еще не ответил.   -  person ArtOfWarfare    schedule 15.01.2014


Ответы (1)


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

person ArtOfWarfare    schedule 15.01.2014