Почему кадр detailViewController всегда возвращает мне 1024 * 768 - PullRequest
1 голос
/ 17 октября 2011

У меня есть приложение для iPad с контроллером раздельного просмотра.

Я хочу программно создать и добавить подпредставление к detailViewController в правом нижнем углу. Для этого я пытаюсь получить кадр detailView (приложение поддерживает автоповорот, чтобы положение не было статичным)

я делаю следующее

в viewWillAppear for detailView Я пытаюсь получить кадр и рассчитать нужную мне позицию

- (void)viewWillAppear:(BOOL)animated {

  [super viewWillAppear:animated];    

    CGRect btnRect = self.view.frame;
    //it always return 1024*748 width and height
    //even in landscape mode
    //when as i think must return 1024-321=703*748 pxls
    //where is my mistake? How i can get actual frame
    //dimensions for detailViewController in landscape orientation

    btnRect.origin.y = btnRect.size.height - 42;
    btnRect.origin.x = btnRect.size.width - 42;
    btnRect.size.height = 42;
    btnRect.size.width = 42;

    UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setBackgroundImage:someimage forState:UIControlStateNormal];
[[btn layer] setFrame:btnRect];

   [self.view addSubview:btn];  
}

Но это всегда показывает, что рамка detailView имеет размеры 1024 * 748. В ландшафтном режиме я думаю, что это должно быть 703 * 748. Что мне нужно сделать, чтобы получить реальный кадр detailView?

1 Ответ

2 голосов
/ 17 октября 2011

Вы должны изменить рамку представления в методе shouldAutorotateToInterfaceOrientation.

Пример: (В этом случае scrollView2 будет настроен в соответствии с его новой ориентацией (на 88 пикселей ниже основного вида))

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations

    if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {

        // Portrait
        self.scrollView2.frame = CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, self.view.frame.size.height - 88);
        [self drawContent];
    }
    else {

        // Landscape
        self.scrollView2.frame = CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.height, self.view.frame.size.width);
        [self drawContent];
    }


    return YES;
}
...