Настройка UITableView с ячейками страницы и автоматическое изменение размера ее ячейки путем автоповорота устройства - PullRequest
0 голосов
/ 29 марта 2011

(ПРИМЕЧАНИЕ РЕШЕНИЯ, НЕ ВОПРОС, Я НЕОБХОДИМО ОТВЕТИТЬ)

Когда UITableViewController автоматически вращается, его UITableView изменяется автоматически, но его ячейки не меняются и даже неправильно позиционируются после вращения.

Особенно, в случае пейджинга, это хуже. Вы можете установить pagingEnabled на YES и высоту ячеек на [UITableView bounds].size.height для представления подкачки. Однако после автоповорота UITableView все запутано.

Как я могу сделать так, чтобы размеры этих ячеек автоматически изменялись при повороте табличного представления?

1 Ответ

5 голосов
/ 29 марта 2011

Сделайте UITableViewController вот так.Основная концепция - beginUpdate до вращения и endUpdate после вращения.Только с этим автоматическое изменение размера ячейки будет сделано автоматически.Однако их позиционирования не будет.Поэтому я добавил ручную прокрутку к определенной позиции.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return [tableView bounds].size.height;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return  YES;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [[self tableView] beginUpdates];  
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];  
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    [[self tableView] endUpdates]; 

    //  We have to specify an position to scroll to explicitly and manually
    //  becase current page number is no determinable especially if user rotate device continually.
    NSIndexPath*    indexPath   =   [NSIndexPath indexPathForRow:0 inSection:0];

    [[self tableView] scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

- (void) viewDidLoad
{
    [super viewDidLoad];

    [[self tableView] setPagingEnabled:YES];
}
...