Как изменить размер UIButton в нижнем колонтитуле UITableView при изменении ориентации - PullRequest
9 голосов
/ 18 мая 2011

Я использую две кнопки UIB в нижнем колонтитуле UITableView (оба подпредставления одного UIView).Я не использую UITableViewCell, потому что я хотел сделать скин для кнопки, чтобы она выглядела как красная кнопка «Удалить» в нижней части некоторых экранов iPhone, например, при редактировании контакта.

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

Есть ли хитрость или лучший способ?

Ответы [ 4 ]

14 голосов
/ 25 мая 2011

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

Некоторые примеры кода, чтобы показать, как это работает.Это создает две кнопки, изменяющие размер при повороте.

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 50)];

    view.backgroundColor = [UIColor redColor];

    UIButton *buttonA = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    buttonA.frame = CGRectMake(20, 5, 125, 40);
    [buttonA setTitle:@"ButtonA" forState:UIControlStateNormal];
    buttonA.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

    [view addSubview:buttonA];

    UIButton *buttonB = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    buttonB.frame = CGRectMake(175, 5, 125, 40);
    [buttonB setTitle:@"ButtonB" forState:UIControlStateNormal];
    buttonB.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

    [view addSubview:buttonB];

    return [view autorelease];
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 50;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}
0 голосов
/ 24 мая 2011

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

0 голосов
/ 24 мая 2011

Я делаю что-то очень похожее на ваше, за исключением того, что у меня есть только одна кнопка.возвращаемое вами представление должно иметь ту же ширину, что и само tableView.

CGFloat footerWidth = mainTableView.frame.size.width;
CGRect frameTableFooter = CGRectMake(0.0, 0.0, footerWidth, 60.0);  
viewForTableFooter.frame = frameTableFooter;
// buttons addition
mainTableView.tableFooterView = viewForTableFooter;
0 голосов
/ 18 мая 2011

Пожалуйста, используйте 2 кадра для кнопки один для ландшафтного режима, а другой - для портретного режима ... это сработает ... поэтому, когда ориентация меняется, проверьте его ландшафт или портрет и назначьте для него кадр ... проверьте режим здесь rotatetointerfaceorientation

...