iOS / Objective-C: создание UIScrollView, который заполняет экран и переориентируется - PullRequest
2 голосов
/ 17 апреля 2011

Я пытаюсь достичь самой простой вещи - создать UIScrollView, который заполняет (и точно соответствует) фрейм приложения (т. Е. Экран минус высота строки состояния) независимо от ориентации устройства.

Это оказывается очень сложнымхотя - вид прокрутки кажется неохотным, чтобы изменить размер правильно в альбомной ориентации, и я не уверен почему.

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

Вы можете увидеть подход, который я использую ниже.Будет ли кто-нибудь достаточно любезен, чтобы продемонстрировать, как сделать это правильно?Кажется, у меня постоянно возникают проблемы с правильным размером объектов, особенно когда я пытаюсь полностью заполнить экран iPhone / iPad.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    CGFloat viewedWidth, viewedHeight;
    const CGSize dim = [UIScreen mainScreen].bounds.size;
    if (UIInterfaceOrientationIsPortrait([UIDevice currentDevice].orientation)) {
        viewedWidth = dim.width;
        viewedHeight = dim.height;
    } else {
        viewedWidth = dim.height;
        viewedHeight = dim.width;
    }
    [self.scrollView setFrame:CGRectMake(0.0f, 0.0f, viewedWidth, viewedHeight)];
}

-(void)viewDidLoad {
    [self.view setFrame:[UIScreen mainScreen].bounds];
    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,1,1)];
    [self.scrollView setDelegate:self];        
    [self.view addSubview:self.scrollView];
    [self.scrollView setContentSize:sizeManager.canvasSize];
    [self didRotateFromInterfaceOrientation:UIInterfaceOrientationPortrait]; // NOTE: orientation passed is not used, dummy
}

Ваш совет очень приветствуется, большое спасибо.

1 Ответ

5 голосов
/ 17 апреля 2011

Я бы не пытался определить размер самостоятельно;просто позвольте iOS сделать всю работу за вас:

- (void)viewDidLoad {
    UIScrollView *sv = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    sv.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:sv];
    [sv release];
}

Это гарантирует, что размер прокрутки всегда будет изменяться вместе с видом контейнера.

...