изменение размера содержимого UITableviewcell в альбомной ориентации

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

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

Есть кто может помочь с этим?

Этот код предназначен для ionterfaceOrientation, и если это ландшафт, я вызываю reloadData для своего табличного представления.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if (interfaceOrientation == UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight)
    {

        NSLog(@"LandsCape Mode");
        [mytabla reloadData];

    }else{
        NSLog(@"Portrait Mode");
    }



    return YES;
    // for supported orientations
    //return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

До этого все ОК, но мой tableview не изменяет размер содержимого.

Это код, запускающий мое представление таблицы cellForRowAtIndexPath:(NSIndexPath *)indexPath

 AsyncImageView *asyncImageView = nil;
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        }

            CGRect frame;
            frame.origin.x = 5;
            frame.origin.y = 10;
            frame.size.width = 70;
            frame.size.height = 60;
            asyncImageView = [[[AsyncImageView alloc] initWithFrame:frame] autorelease];
            asyncImageView.tag = ASYNC_IMAGE_TAG;
            cell.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
            frame.origin.x = 52 + 10;
            frame.size.width = 200;

            NSString *urlSeccion = aBook.Titulo;
            urlSeccion = [urlSeccion stringByReplacingOccurrencesOfString:@"\n" withString:@""];

            NSString *SeccionSummary = aBook.Summary;
            SeccionSummary = [SeccionSummary stringByReplacingOccurrencesOfString:@"\n" withString:@""];

            [cell.contentView addSubview:asyncImageView];

            upLabelText = [[UILabel alloc] initWithFrame:CGRectMake(90, cell.frame.origin.y, cell.frame.origin.size, 50)];
            upLabelText.textColor = [UIColor blackColor];
            upLabelText.text = urlSeccion;
            [upLabelText setNumberOfLines:2];
            [upLabelText setLineBreakMode:UILineBreakModeWordWrap];
            upLabelText.font = [UIFont systemFontOfSize:13.0];  


            downLabelText = [[UILabel alloc] initWithFrame:CGRectMake(90, 45, cell.frame.origin.size, 50)];
            downLabelText.textColor = [UIColor blackColor];
            downLabelText.text = SeccionSummary;
            [downLabelText setNumberOfLines:5];
            [downLabelText setLineBreakMode:UILineBreakModeWordWrap];
            downLabelText.font = [UIFont systemFontOfSize:8.0];  



            [cell.contentView addSubview:downLabelText];
            [cell.contentView addSubview:upLabelText];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

            asyncImageView = (AsyncImageView *) [cell.contentView viewWithTag:ASYNC_IMAGE_TAG];



            NSString *urlSeccionImagen = aBook.ThumbnailURL;
            urlSeccionImagen = [urlSeccionImagen stringByReplacingOccurrencesOfString:@" " withString:@""];
            urlSeccionImagen = [urlSeccionImagen stringByReplacingOccurrencesOfString:@"\n" withString:@""];
            urlSeccionImagen = [urlSeccionImagen stringByReplacingOccurrencesOfString:@" " withString:@""];

            NSString *urlString = [NSString stringWithFormat:urlSeccionImagen,indexPath.row + 1];
            NSURL *url = [NSURL URLWithString:urlString];
            [asyncImageView loadImageFromURL:url];

return cell;
}

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


person Jonathan    schedule 31.08.2009    source источник


Ответы (4)


Спасибо за этот обмен. Это отличная идея, иметь метод настройки UITableViewCell. Но я понял, что содержимое uitableviewcell может быть изменено только с помощью этой строки кода:

tituloLabelText.autoresizingMask = ( UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
tituloLabelText.text = @"A Large text resides here";
[tituloLabelText setNumberOfLines:2];
[tituloLabelText setLineBreakMode:UILineBreakModeWordWrap];

Только с помощью строки autoresizingMask это позволяет элементам управления изменять свою ширину и высоту.

person Jonathan    schedule 23.09.2009

у меня была аналогичная проблема с пользовательским UITableViewCell, и в итоге я загрузил асинхронное изображение (как и вы) и установил его в imageView, предоставленном Apple UITableViewCell (а не в пользовательском изображении, добавленном в качестве подпредставления).

Для метки, размер которой нужно было изменить (текст был длиннее одной строки в портретной ориентации), я установил текст в textLabel по умолчанию, и он был автоматически изменен. У меня также была вторая метка, содержащая дату (текст был коротким и не требовал изменения размера), я добавил его в качестве подвида в представление содержимого ячейки.

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

больше о UITableViewCell вы можете найти здесь UITableViewCell< /а>

в моей пользовательской ячейке UITableView у меня был метод, который устанавливал данные для ячейки... что-то вроде этого:

    - (void) setData:(Feed *) dict
{
    self.autoresizesSubviews = YES;
    self.imageView.image = [UIImage newImageFromResource:@"noFeedImg.png"];
    self.textLabel.highlightedTextColor = [UIColor whiteColor];
    [[self textLabel] setOpaque:NO];
    [[self textLabel] setBackgroundColor:[UIColor clearColor]];
    [[self textLabel] setText:[dict feedTitle]];
    [[self textLabel] setTextColor:[UIColor blackColor]];
    [[self textLabel] setNumberOfLines:3];
    [[self textLabel] setFont:[UIFont boldSystemFontOfSize:12]];

    [self addSubview:dateLabel];
    dateLabel.text = [dict publishDate];
    dateLabel.frame = CGRectMake(self.contentView.bounds.origin.x + 125, 100, 175, 14);
    self.URL = [dict feedURL];

    [imageLoader loadImageFromURL:[NSURL URLWithString:@"http://www.google.com"] withCallbackTarget:self withCallbackSelector:@selector(setupImage:)];
}

в cellForRowAtIndexPath после создания ячейки:

FeedTableViewCell *cell = [[[FeedTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

и после этого настройте информацию, которую будет отображать ячейка:

[cell setData:[feedsList objectAtIndex:feedIndex]];

Надеюсь, что это поможет вам.

person Sorin Antohi    schedule 17.09.2009
comment
Спасибо за этот обмен. Это отличная идея, иметь метод настройки UITableViewCell. - person Jonathan; 24.09.2009

Если у вас подключена пользовательская ячейка в IB autoresizingMask = UIViewAutoresizingFlexibleWidth по какой-то причине не работает.

Я изменяю размер своих пользовательских ячеек при загрузке представления и отключаю вращение представления. Этот код работает на iPhone. iPad нужно +256, я думаю, но никогда не проверял

- (void)viewDidLoad
  {
    [super viewDidLoad];

    if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
    CGRect newFrame = customCell.frame;
    newFrame.size.width = newFrame.size.width+160;
    customCell.frame = newFrame;
  }
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return NO;
}
person Tibidabo    schedule 13.08.2012

Вы можете использовать эту простую строку в методе shouldAutorotateToInterfaceOrientation:

self.view.autoresizesSubviews = YES;
person tryp    schedule 03.08.2012