Пользовательский SectionHeaderView в ландшафте, сохраняющийся в портретном виде после поворота - PullRequest
0 голосов
/ 12 октября 2011

Я использую пользовательский класс sectionheader с табличным представлением и получаю неожиданное поведение после поворота.Вот пример использования:

  1. Нажмите на ячейку в UITableView
  2. Представление помещено в стек.
  3. Поверните представление в альбомную ориентацию.
  4. Поверните назадв портрет.
  5. Вытяните вид.
  6. На iPhone 3G только заголовок раздела в альбомном размере теперь появляется застрявшим где-то посередине вида (кромев заголовок раздела размером с портрет, который появляется, как и должно быть, в верхней части таблицы).Посторонний заголовок прокручивается с помощью ячеек UITableView, и переключение с вида на вид и обратно (UITableView вложено в UITabBarController) не решает проблему.

Я не могу воспроизвести эту проблемуна iPhone 4 или в симуляторе.Кажется, что по какой-то причине представление заголовка раздела в альбомной ориентации добавляется в представление uitable после появления представления второго уровня, но почему это так?Обратите внимание, что та же проблема воспроизводится, когда используется заголовок по умолчанию (а не пользовательский).Я также проверил, является ли проблемой неправильная ориентация устройства, и это не так.

Вот код инициализации для пользовательского класса SectionHeaderView, если это полезно:

-(id)initWithFrame:(CGRect)frame title:(NSString*)title delegate:(id <SectionHeaderViewDelegate>)aDelegate {

self = [super initWithFrame:frame];

if (self != nil) {

    float lineHeight = 0.5f;
    // check line sizing for retina/non-retina
    if (![Utilities hasRetina])
    {
        lineHeight = 1.0f;
    }

    // Set up the tap gesture recognizer.
    delegate = aDelegate;        

    // Create and configure the title label.
    CGRect titleLabelFrame = self.bounds;
    titleLabelFrame.origin.y -= 12.5;
    titleLabel = [[UILabel alloc] initWithFrame:titleLabelFrame];
    titleLabel.text = title;
    titleLabel.textAlignment = UITextAlignmentCenter;
    titleLabel.font = [UIFont fontWithName:@"Georgia" size:15.0];
    titleLabel.textColor = [UIColor whiteColor];
    titleLabel.backgroundColor = [UIColor clearColor];
    [self addSubview:titleLabel];

    // add thin white line to top of section header
    UIView *topBorder = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.bounds.size.width, lineHeight)];
    [topBorder setBackgroundColor:[UIColor whiteColor]];
    [self addSubview:topBorder];
    [topBorder release];

    // Set the colors for the gradient layer.
    static NSMutableArray *colors = nil;
    if (colors == nil) {
        colors = [[NSMutableArray alloc] initWithCapacity:3];
        UIColor *color = nil;
        color = [UIColor colorWithRed:57.0/255.0 green:56.0/255.0 blue:105.0/255.0 alpha:1.0];
        [colors addObject:(id)[color CGColor]];
        color = [UIColor colorWithRed:54.0/255.0 green:53.0/255.0 blue:95.0/255.0 alpha:1.0];
        [colors addObject:(id)[color CGColor]];
        color = [UIColor colorWithRed:57.0/255.0 green:56.0/255.0 blue:105.0/255.0 alpha:1.0];
        [colors addObject:(id)[color CGColor]];
    }
    [(CAGradientLayer *)self.layer setColors:colors];
    [(CAGradientLayer *)self.layer setLocations:[NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.48], [NSNumber numberWithFloat:1.0], nil]];
}

return self;
}

Почему в альбомной ориентации добавляется дополнительная альбомная версия пользовательского SectionHeaderView, только на iPhone 3G?

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 20 апреля 2012

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

...