изменение размера содержимого UITableviewcell в альбомной ориентации - PullRequest
3 голосов
/ 31 августа 2009

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

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

Кто-нибудь может помочь с этим?

Этот код предназначен для 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);
}

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

Это код инициализации моей таблицы 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;
}

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

Ответы [ 4 ]

3 голосов
/ 24 сентября 2009

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

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

Только с линией autoresizingMask это позволяет элементам управления изменять их Widht и Height.

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

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

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

Первоначально я сделал то, что вы сделали в приведенном выше коде. Я настроил свои 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]];

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

0 голосов
/ 14 августа 2012

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

Я изменяю размеры своих пользовательских ячеек при загрузке вида и отключаю вращение вида. Этот код работает на 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;
}
0 голосов
/ 03 августа 2012

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

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