UITableViewCells 'метки с разной высотой изменяют ширину меток - PullRequest
0 голосов
/ 12 мая 2011

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    float padding = 40.0f;
    CGSize constraintSize;
    constraintSize.width = 320.0f - padding - padding;
    constraintSize.height = MAXFLOAT;
    CGSize theSize = [thisrowstext sizeWithFont:[UIFont systemFontOfSize:14.0f] 
                            constrainedToSize:constraintSize 
                                lineBreakMode:UILineBreakModeWordWrap];

    if(theSize.height < 24.0f) return 44.0f;
    else return theSize.height + 20.0f;
}

... это работает хорошо, к сожалению,Ширина textLabel, похоже, тоже зависит от некоторых textLAbels (в зависимости от количества строк), выдвигаемых в несколько пикселей.Я пытался установить значения отступов, но это не работает.Кто-нибудь еще сталкивался с этим?

РЕДАКТИРОВАТЬ: я добавляю метод layoutSubviews моего подкласса UITableViewCell, который я использую (без NIB).

- (void)layoutSubviews
{
    [super layoutSubviews];

    if (self.hideImage)
    {
            self.imageView.alpha = 0.0f;
            self.imageView.frame = CGRectMake(-40.0f, 1.0f, 40.0f, 40.0f);
            CGRect frame = self.textLabel.frame;
            self.textLabel.frame = CGRectMake(frame.origin.x - 40.0f, frame.origin.y, frame.size.width + 40.0f, frame.size.height);
            [self.textLabel setNeedsLayout];

    }
    else
    {
            self.imageView.alpha = 1.0f;
            self.imageView.frame = CGRectMake(1.0f, 1.0f, 40.0f, 40.0f);        
            [self.textLabel setNeedsLayout];
    }
}

РЕДАКТИРОВАТЬ: также добавляя cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *TableCellViewWithHidableImageIdentifier = @"TableCellViewWithHidableImage";
    TableCellViewWithHidableImage *cell = (TableCellViewWithHidableImage *)[tableView dequeueReusableCellWithIdentifier:TableCellViewWithHidableImageIdentifier];
    if (cell == nil)
    {
        cell = [[[TableCellViewWithHidableImage alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableCellViewWithHidableImageIdentifier] autorelease];
    }

    cell.hideImage = NO;
    cell.imageView.image = [UIImage imageNamed:@"empty.png"];
    cell.textLabel.font = [UIFont systemFontOfSize:16.0f];
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.text = @"whatever";
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;    
}

enter image description here

Ответы [ 2 ]

1 голос
/ 13 мая 2011

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

Я подозреваю, что у вас может быть проблема с autoresizeMask в одном или нескольких подпредставлениях ячеек таблицы.

0 голосов
/ 14 мая 2011

Это немного догадка, но мне кажется, что это изображение в левой части ячейки. Похоже, что когда ячейка становится выше, она становится шире (пытается сохранить соотношение сторон?), И это толкает ваш текст вправо. Странно, что ваше изображение не растянуто. Возможно, стоит посмотреть, что происходит с этим изображением во время layoutSubviews. Если ваша пользовательская ячейка не реализует этот метод, возможно, реализация базового класса делает то, чего вы не ожидаете. Вы можете переопределить его и NSLog в кадре просмотра изображения до и после вызова [super layoutSubviews], чтобы увидеть, что происходит.

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