iPhone - UITableViewController - Настройка заголовка раздела в портретной и альбомной ориентации

У меня есть контроллер UITableView, который использует представление заголовка пользовательского раздела. Когда мое устройство портретное, оно отображается идеально. И когда мое устройство находится в альбомной ориентации, оно снова идеально. Но когда ориентация изменилась во время выполнения приложения, мой вид сечения не обновляется. В чем проблема?

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

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 80;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSDictionary* dict = [threadsArray objectAtIndex:section];

    UIView* headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 80)];
    headerView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.2];

    UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 15, self.view.frame.size.width - 98, 21)];
    newLabel.textColor = [UIColor blackColor];
    newLabel.font = [UIFont boldSystemFontOfSize:17];
    newLabel.text = [dict objectForKey:@"Name"];
    newLabel.backgroundColor = [UIColor clearColor];
    [headerView addSubview:newLabel];

    UIButton* addButton = [UIButton buttonWithType:UIButtonTypeContactAdd];
    addButton.frame = CGRectMake(self.view.frame.size.width - 88, 11, 29, 29);
    NSLog(@"%f %f %f %f",addButton.frame.origin.x,addButton.frame.origin.y, addButton.frame.size.width,addButton.frame.size.height);
    [addButton addTarget:self action:@selector(addThreadResponseClicked:) forControlEvents:UIControlEventTouchDown];
    [headerView addSubview:addButton];

    UIButton* expandCollapseButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [expandCollapseButton setImage:[UIImage imageNamed:@"Expand.png"] forState:UIControlStateNormal];
    expandCollapseButton.frame = CGRectMake(self.view.frame.size.width - 48, 11, 29, 29);
    NSLog(@"%f %f %f %f",expandCollapseButton.frame.origin.x,expandCollapseButton.frame.origin.y, expandCollapseButton.frame.size.width,expandCollapseButton.frame.size.height);
    [expandCollapseButton addTarget:self action:@selector(expandCollapseHeader:) forControlEvents:UIControlEventTouchDown];
    [headerView addSubview:expandCollapseButton];

    addButton.tag = expandCollapseButton.tag = section;
    return [headerView autorelease];
}

person Satyam    schedule 27.02.2011    source источник


Ответы (1)


Попробуйте установить представления автоматическое изменение размеров масок соответствующим образом: например, для headerView;

[headerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

а для addButton и expandCollapseButton установите для AutoresizingMask значение:

UIViewAutoresizingMaskFlexibleLeftMargin
person Jonathan.    schedule 27.02.2011
comment
Если вы видите мой код, при изменении ориентации я создаю новый заголовок. Даже я пытался установить маски автоматического изменения размера. Мне это не помогло. - person Satyam; 01.03.2011
comment
вместо того, чтобы ссылаться на рамки представления, вместо этого используйте границы, обычно границы используются при добавлении подпредставлений, поскольку рамка не обязательно переключает ширину и высоту, когда пользовательский интерфейс поворачивается, как вы ожидаете (это немного случайно, и я надеюсь, что Apple исправит ) - person Jonathan.; 01.03.2011
comment
установить маску автоматического изменения размера, исправить мою проблему. Спасибо - person Philip007; 08.11.2012