2014-01-08 2 views
4

Я пытаюсь использовать UILabel, который может показывать богатый контент. Для этого я использую свойство attributedText в UILabel и NSAttributedString Я выделяю NSHTMLTextDocumentType.Как нарисовать границу вокруг абзаца в UILabel?

Один тип форматирования, который я хочу достичь, - это нарисовать границу вокруг абзацев (для кавычек). Нормальное форматирование текста, например шрифт, полужирный, курсив и т. Д., Кажется, работает нормально, но когда я использую свойства CSS, такие как border, он не работает так, как я ожидал. См. Изображение; отображается только свойство background-color.

UILabel with HTML

attributedText свойство этого UILabel является:

<style> 
    body{font:10pt Verdana;} .quote {background-color:#ddd;border:1px solid #aaa;} 
</style> 
<body> 
    <div class="quote">This is a quote</div> 
    <br/> 
    Bla bla bla 
</body> 

Что я ожидаю бордюр вокруг первого предложения/абзаца, в UILabel - не граница вокруг всей UILabel.

Текст фона показывает, но ожидаемой границы нет. Возможно ли это достичь? Я бы предпочел использовать UILabel, чтобы сохранить скорость моего UITableView.

+0

Почему вы используете divs или абзацы для цитат, когда есть blockquote и q элементов? – cimmanon

+0

Справедливая точка, но форматирование не работает независимо от того, какой тег я использую для разметки котировок. – pojo

+0

NSAttributedString не поддерживает свойства границы css. Строка NSattributed предназначена только для отображения содержимого с расширенным текстом, не связанного с веб-просмотром. – CoolMonster

ответ

3

Я не знал об этом реализуется в SDK, даже если вы можете ограничиться прошивкой 7. Есть по крайней мере два основных варианта, хотя.

В подклассе UILabel вы можете использовать методы проклейки NSAttributedString, такие как boundingRectWithSize:options:context: и size, чтобы вычислить, где подтекст появляться, и в переопределение drawTextInRect: нарисовать границу. Вы можете вывести необходимый пограничный фрейм, вычислив кадр для предыдущего текста и добавляя подтекст, а затем изменив их.

Другой вариант, чтобы установить пользовательские атрибуты на вашем NSAttributedStrings, что-то Apple, открыто поощряет, от Apple's overview:

можно присвоить любое имя атрибута/значение пары вы хотите диапазона символов-то вверх к вашему приложению для интерпретации пользовательских атрибутов (см. Руководство по программированию с использованием атрибутов).

Тогда в подклассе NSAttributedStrings, переопределить методы рисования, такие как drawInRect: и реализовать подобную логику пользовательского рисования за первое предложение для пользовательского атрибута, в противном случае рассчитывать на супер.

+0

Спасибо! Я дам ваши предложения выстрелу. – pojo

+0

Подкласс NSAttributedString не рекомендуется из-за того, что это кластер классов – Ryan

1

Насколько я знаю, строки, привязанные к iOS, не поддерживают контуры. Вы когда-нибудь видели это вне веб-представления на iOS или на Mac OS?

+0

Если вы имеете в виду схему текста, это не то, о чем я прошу здесь. Но нет, мне трудно найти информацию о том, что поддерживает NSAttributedString + NSHTMLTextDocumentType *. – pojo

-1

Попробуйте добавить пробел между: и объявлениями. Некоторые переводчики предпочитают это.

body { 
    font: 10pt Verdana; 
} 

.quote { 
    background-color: #ddd; 
    border: 1px solid #aaa; 
} 
+0

Спасибо, но не имеет значения. – pojo

-1

Вы также можете попробовать добавить DIV в класс и добавить свойство шрифта так:

body { 
    font-family: Verdana; 
} 

div.quote { 
    background-color: #ddd; 
    border: 1px solid #aaa; 
    font-size: 10pt; 
} 
0

Когда я вставляю свой код на мой отладчик он показывает границу. Вы пытались изменить цвет на более яркий? Или, может быть, у вас есть другой CSS где-то еще, переписывающий свойство border в вашем основном CSS. Если да, попробуйте тег ! Important для тестирования или встроенного CSS в тег html вместо встроенного.

+0

Какой отладчик вы используете? Я знаю, что разметка HTML работает в браузере - это не вопрос. Речь идет о том, как заставить его работать в компоненте UILabel в iOS. – pojo

+0

Извините, я думал, что это просто CSS. Игнорируйте. –

4

Вы используете -[NSAttributedString initWithData:options:documentAttributes:error:]?

Ваша проблема может исходить от этого ограничения: механизм импорта

HTML, предназначен для реализации что-то вроде уценки ( то есть, текстовые стили, цвета и так далее), а не для общего импорта HTML.

https://developer.apple.com/library/ios/documentation/uikit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html#//apple_ref/occ/instm/NSAttributedString/initWithData:options:documentAttributes:error:

+0

Спасибо! Как-то я пропустил это замечание в документах. – pojo

Смежные вопросы