iPad, изменить размер пользовательской кнопки в ViewForHeaderInSection - PullRequest
0 голосов
/ 05 октября 2011

У моего приложения есть splitview, и оно активируется только в ландшафтном режиме.В masterview у меня есть tableview, а в последнем разделе у меня есть пользовательская кнопка.Проблема в том, что ширина кнопки остается в портретной ориентации вместо использования ориентации устройства.Я пытался поиграть с setAutoresizingMask для кнопки и просмотра, но это тоже не сработало.

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) sectionNum {
    if (sectionNum == 4) {
        CGRect frameSize;

        if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
            frameSize = CGRectMake(45.0, 0.0, 600.0, 44.0);
        } else {
            frameSize = CGRectMake(45.0, 0.0, 680.0, 44.0);
        }

        UIView *btnView = [[[UIView alloc] initWithFrame:frameSize] autorelease];

        // button
        UIButton* btnFind = [UIButton buttonWithType:UIButtonTypeCustom];
        [btnFind setBackgroundImage:[[UIImage imageNamed:@"buttonblue.png"] stretchableImageWithLeftCapWidth:14.0 topCapHeight:0.0] forState:UIControlStateNormal];
        [btnFind setBackgroundImage:[[UIImage imageNamed:@"buttonred.png"] stretchableImageWithLeftCapWidth:14.0 topCapHeight:0.0] forState:UIControlStateHighlighted];

        btnFind.frame = frameSize;
        btnFind.tag = 1;

        [btnFind setTitle:@"Find" forState:UIControlStateNormal];
        [btnFind addTarget:self action:@selector(doSearchDoc:) forControlEvents:UIControlEventTouchUpInside];
        //[btnFind setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];

        //[btnView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
        [btnView addSubview:btnFind];

        return btnView;
    }

    return nil;
}

Может кто-нибудь, пожалуйста, дайте мне знать, как решить эту проблему.

Спасибо.

1 Ответ

1 голос
/ 05 октября 2011

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

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    // This solves an issue that the header doesn't show when roating device (ok on simulator)
    NSIndexPath* ipselected = [self.tableView indexPathForSelectedRow];
    [self.tableView reloadData];
    [self.tableView selectRowAtIndexPath:ipselected animated:false scrollPosition:UITableViewScrollPositionMiddle];
}

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

В качестве альтернативы вы можете оставить ивар на своей кнопке и изменить ее рамку описанным выше способом.

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