2009-06-29 3 views
2

Привет ист есть способ разделить строку для UITableView на конкретной линии, чтобы поставить «отдых» (вторая часть данных) в собственной ячейкеSplit Строка в конкретной строке для NSString

NSString *data;  
CGsize *size = [data sizeOfStringWithFont:[UIFont systemFontOfSize:14] constrainToWidth:280.0]; 

если размер. высота, например больше 1500, я хочу разбить строку на этой позиции линии!

спасибо

ответ

1

Используйте «constrainedToSize» (вместо того, чтобы только по ширине) и сделать столько, сколько вы можете.

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

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

1

Я думаю, что у Kendall есть правильная идея, но ограниченные размеры должны быть отменены, чтобы получить точную высоту, основанную на переносе слов. Возьмите образец CGSize, который имеет ту же ширину, что и ваша ячейка, но с высотой, превышающей максимальную высоту, которую вы ожидаете. В приведенном ниже примере код textSize будет содержать высоту вашей строки, которая будет отображаться в вашей ячейке с неограниченной высотой.

CGSize sz = CGSizeMake (
    yourCellWidth, 
    999999.0f); 

CGSize textSize = [yourString sizeWithFont:yourCellfont 
        constrainedToSize:sz 
        lineBreakMode:UILineBreakModeWordWrap]; 

Если высота больше, чем 1500, вы могли бы начать хватая подстроки (substringWithRange) с конца и их измерения, как и выше, пока не получите что-то> = остаток выше 1500, который был возвращен на TextSize.