UITableViewCell перекрываются - PullRequest
       4

UITableViewCell перекрываются

0 голосов
/ 21 апреля 2011

У меня есть UITableViewCell, который detailTextLabel заставляет фрейм ячеек зависеть от его размера.

Мой код для этого:

ячейка для строки в методе индекса

cell.textLabel.text = @"Rights";
            cell.backgroundColor = [UIColor clearColor];
            cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
            cell.detailTextLabel.numberOfLines = 0;
            cell.detailTextLabel.text = [self getItemForKey:kRights];
            cell.textLabel.font = [UIFont systemFontOfSize:15];
            cell.detailTextLabel.font = cell.textLabel.font;
            cell.textLabel.textColor = [UIColor colorWithRed:54.0f/255.0f green:54.0f/255.0f blue:54.0f/255.0f alpha:1.0f];
            CGSize constraintSize = CGSizeMake(310.0f, MAXFLOAT);
            CGSize labelSize = [[cell.detailTextLabel text] sizeWithFont:[cell.detailTextLabel font] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
            cell.detailTextLabel.frame = CGRectMake( 0, 0, 310, labelSize.height);
            cell.userInteractionEnabled = YES;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.accessoryType = UITableViewCellAccessoryNone;

Высота строки в методе индекса

 if (indexPath.row == 3){
                NSString *text = [self getItemForKey:kRights];
                CGSize constraintSize = CGSizeMake(310.0f, MAXFLOAT);
                CGSize labelSize = [text sizeWithFont:[UIFont systemFontOfSize:15]
                                    constrainedToSize:constraintSize 
                                        lineBreakMode:UILineBreakModeWordWrap];
                return labelSize.height+11;
            }

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

Вот изображение, чтобы показать вам мою проблему:

http://img689.imageshack.us/i/screenshot2011042102520.png/

1 Ответ

1 голос
/ 21 апреля 2011

Вы просто забыли, в методе высота строки при индексировании, чтобы учитывать остальное содержимое ячейки?Вы добавляете 11 точек к высоте detailTextLabel.Не похоже, что этого достаточно.Запуск [@ "Rights" sizeWithFont: [UIFont systemFontOfSize: 15]] возвращает высоту 19. Таким образом, вам понадобится столько, чтобы учесть высоту textLabel, плюс любой пробел между textLabel и detail, плюс верхнее и нижнее полявнутри ячейки, плюс любое другое содержимое ячейки.

Кроме того, из вашего снимка экрана может показаться, что у вас может быть некоторое перекрытие содержимого в этой конкретной ячейке.Это может быть результатом того, что кадр, который вы устанавливаете для detailTextLabel:

cell.detailTextLabel.frame = CGRectMake( 0, 0, 310, labelSize.height);

Вы устанавливаете источник кадра в (0, 0), то есть в верхнем левом углу ячейки.Это заставило бы detailTextLabel перекрывать textLabel для ячейки.

Надеюсь, это полезно.

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