NSString преждевременно обрезается в UITableViewCell в 3.0, но отлично выглядит в 3.1 - PullRequest
1 голос
/ 21 августа 2009

Я использую UITableViewCellStyleValue2 и UITableViewStyleGrouped.

Давайте начнем с некоторого кода (он не завершен на 100%, но я попытался включить код, необходимый для расшифровки того, что я делаю, и, возможно, делаю неправильно):

#define CELL_FONTSIZE 15.0f
CGSize textSizeValue2 = {207.0f, 9999.0f};

if ([value isEqual: CELL_4]) {
     CGSize   size = [cell4String sizeWithFont:[UIFont boldSystemFontOfSize:CELL_FONTSIZE] constrainedToSize:textSizeValue2 lineBreakMode:UILineBreakModeWordWrap];
     size.height += CELL_HEIGHT;          // top and bottom margin
     result = MAX(size.height, 44.0f);  // at least one row

Для этой конкретной ячейки результат для высоты получается равным 214 как для 3,0, так и для 3,1

.

Вот код для ячейки:

static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
    cell.textLabel.numberOfLines = 0;
    cell.detailTextLabel.numberOfLines = 0;
    cell.clearsContextBeforeDrawing;

if ([value isEqual: CELL_4]) {
        cell.textLabel.text = @"About";
        cell.detailTextLabel.text = cell4String;

Таким образом, в основном для 3.0 и 3.1 происходит то же самое, но при запуске приложения в симуляторе 3.0 последняя строка обрезается, если cell.detailTextLabel.numberOfLines содержит более трех строк текста. Странно то, что текст просто обрезается, но ячейка рисуется на правильной высоте в 3.0, под ячейкой просто большое пустое пространство.

Кто-нибудь знает, почему это отличается между 3,0 и 3,1? Я знаю, что использую бета-версию Xcode, но довольно странно, что она работает в бета-версии, а не в 3.0, потому что, насколько я понимаю, я не делаю ничего слишком сумасшедшего, но что-то простое.

Спасибо

Ответы [ 3 ]

1 голос
/ 25 сентября 2009

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

        UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:14.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [[detailValues objectAtIndex:indexPath.section] sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    labelHeight = labelSize.height + 20;
1 голос
/ 16 сентября 2009

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

Я использую Xcode 3.1.3 с установленным iPhone SDK 3.0 (не бета). «Пробел» появляется как в симуляторе, так и на устройстве, на котором установлена ​​прошивка 3.0. Я не пробовал более свежую версию.

0 голосов
/ 19 июня 2012

Я сталкивался с этим постом, когда у меня была похожая проблема на iOS5, поэтому я оставлю несколько строк о том, как я решил свою проблему на случай, если кто-то застрянет. В своих ячейках я увеличил размер шрифта текста, а затем он обрезал текст, хотя для его размещения оставалось достаточно места. У меня было

adjustsFontSizeToFitWidth:NO

так что оно усекало текст с ...

То, как я это исправил, просто увеличило общую ширину и высоту рамки ячейки, и это помогло.

 CGRect frame = CGRectMake(0, 0, SCREEN_WIDTH, height);
 UIView *view = [[UIView alloc] initWithFrame:frame];
 cell.frame = frame;

Надеюсь, это поможет кому-то в будущем

удачи

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