Можете ли вы разделить NSString на NSArray строк на основе размера содержимого? - PullRequest
0 голосов
/ 02 ноября 2011

В основном я хочу передать NSString и CGSize (размер контента) и получить NSArray из NSStrings, который будет соответствовать этому размеру контента.

Так, например, у меня есть @"something really long" и указать размер CGSizeMake(20, 10), я бы вернул, например, NSArray из [@"something", @" really", @" long"].

У кого-нибудь есть идеи / пример кода?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Не уверен, что это так прямо.Достаточно ли CGSize?Разве объем текста, который может поместиться внутри contentSize, тоже не зависит от fontSize?Не уверен, что вы хотели бы сделать все это.Это может быть довольно сложным.Не вижу необходимости во всем этом.

Вместо этого определите некоторые удобные contentSize для вашего UILabel и обрежьте все остальное или, что еще лучше, выберите Adjust to Fit вместе с определением мин.размер шрифта.С этой iOS будет стараться соответствовать вашему тексту с учетом минимального размера шрифта.Вот как это сделать в IB -

enter image description here

1 голос
/ 02 ноября 2011

Предполагая, что вы хотите разбить по словам (разбить там, где есть пробел), вот алгоритм псевдо-кода:

1) Get Width as parameter
2) Declare String temp, int breakPoint, array list
3) For Each (character in String)
       Add character to temp String
       if (character is space)
           set breakPoint to currentIndexInTemp    
       end if
       if (temp String size > Width OR character is newline)
           declare String newString
           set newString equal to substring of temp(from 0 to breakPoint)
           add newString to list
           set temp to substring of temp(from breakPoint + 1 to end)
           reset breakPoint
       end if
   end For Each
4) if (length of temp > 0)
       add temp to list
   end if
5) return list

Извините, если это ужасный псевдокод, я не пишу псевдокод часто (вообще-то, вообще), и я недостаточно знаком с Objective-C, чтобы писать его на языке.

Примечание

  • breakPoint - это последнее вхождение пробела или разрыв в
    символов, если длина слишком велика, вы хотите вырезать на
    breakPoint для предотвращения прерывания слова. Это индекс в
    temp Только строка, а не строка, которую вы разбиваете.

Может быть более простой способ сделать это в Objective-C, я не знаю, этот алгоритм основан на функции, которую я написал в Java, чтобы разбить строку на 80 символов.

EDIT Добавлено тестирование новой линии. В моем примере, если это новая строка, разбейте ее там, слишком длинная или нет. Кроме того, когда вы разбиваете строку на массив (второй, если), вы захотите сбросить переменную breakPoint. Я также согласен с тем, что для слишком больших порций текста это увеличит накладные расходы, у меня не было проблем с обработкой текста в несколько сотен символов. Хотя это было сделано на компьютере / ноутбуке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...