2013-04-26 2 views
9

Этот вопрос касается реализации отступ текста («Размещение текста дальше вправо, чтобы отделить его от окружающего текста») в iOS.Цель c - Отступ текста

Возьмем, например, следующий текст:

  1. Это первый раздел.
  2. Это второй,
    с двумя линиями.
  3. Это уже третий.

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

Мой код содержит массив NSString, каждый из которых должен отображаться как раздел с числовой маркой, как указано выше. например:

NSArray *array = [NSArray arrayWithObjects:@"1. This is the first section.", @"2. This is the second one, with two lines.", @"3. This is the third.", nil]; 

Я использую UILable для отображения текста на экране.
Чтобы установить текст из массива на этикетку, и отделить каждую строку в новой строке я использую

myLabel.text = [array componentsJoinedByString:@"\n"]; 

Любые идеи, как получить этот эффект?

+0

и нужно переопределить DrawRect (для контроля) и нужно написать свой собственный код отступа для решения этой проблемы. – samfisher

+0

Вы пытаетесь сделать это в маркированном списке, как показано?Как вы делаете общий блок? Можете ли вы дать больше контекста? –

+0

@BrianNickel да, мне нужен стиль пули, я добавил информацию к моему вопросу. – Eyal

ответ

2

Ну, я решил реализовать его самостоятельно, не используя Core Text, я только что создал структуру представления, которая делает все отступы само по себе и позволяет настраивать их по своему усмотрению.

Для всех вас заинтересован в реализации, вы можете увидеть исходный код и пример проект здесь:
ECListView Project

0

UILabel не собирается сокращать его, если у вас есть какие-либо конкретные требования к макету. Для этого вам нужно будет выкопать в Core Text. Хорошей новостью является то, что Core Text позволит вам делать любые текстовые макеты, которые вы можете себе представить. Плохая новость заключается в том, что вся эта сила приносит с собой некоторую сложность, поэтому для ее использования вам придется потратить некоторое время на изучение того, как работает инфраструктура.

Альтернативой, подходящей в некоторых ситуациях, является использование веб-представления для отображения вашего текста. UIWebView позволит вам делать любой текстовый макет, которым вы можете управлять, используя HTML и CSS.

+0

10x для вашего ответа, я представил себе, что мне нужно использовать базовую структуру Core. Это очень общая проблема, я полагаю, что многие люди уже справляются с этой проблемой и внедряют какое-то общее решение. Поэтому я скорее не буду изобретать колесо, а получить некоторую ссылку на фрагмент кода или учебник. – Eyal

25

Это возможно в некоторой степени в iOS6 с - [UILabel setAttributedText:].

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.headIndent = 29; 

myLabel.attributedText = [[NSAttributedString alloc] initWithString: 
    @"1.\tShort line.\n2.\tLong line with content that triggers wrapping.\n3.\tShort line." 
    attributes:@{NSParagraphStyleAttributeName: paragraphStyle}]; 

Result of the above code

Это добавляет отступы в последующих строках. Похоже, что iOS не поддерживает табуляции так же, как OSX, поэтому я не вижу способ отрегулировать разрыв между числом и текстом. Вероятно, это возможно в CoreText.

Конечно, вы также можете просто заменить ярлык UIWebView и иметь полный контроль форматирования на всех версиях iOS за счет производительности.

+0

спасибо, но мне нужно решение ios 5 – Eyal

+1

Точно, что мне нужно – onmyway133

+1

Это блестяще, спасибо! –

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