Центр UIPageControl после смены ориентации - PullRequest
3 голосов
/ 20 сентября 2011

Я пытаюсь централизовать UIPageControl в портретном и ландшафтном режимах, но он не работает, x меняется после вращения устройства.

@interface DetailViewController : UIViewController<UIScrollViewDelegate>
{
    UIPageControl *pageControl;
}

- (void)viewDidLoad
{
    pageControl = [[UIPageControl alloc] init] ;  
    [self renderMyView];
    [self.view addSubview:pageControl];
}

- (void)renderMyView
{
   if(isPortrait)
   {
        pageControl.frame = CGRectMake(200, 976, 0, 0);
   } else {
        pageControl.frame = CGRectMake(200, 720, 0, 0);
   }
}

renderMyView выполняется didLoad и didRotate.

В первый раз viewDidLoad хорошо работает в портретной и альбомной ориентации, но если я поверну устройство, pageControl появится в другом x != 200.

Я тоже пробовал pageControl.center, но это не сработало.

Как мне сохранить его централизованным?

Ответы [ 3 ]

5 голосов
/ 20 сентября 2011

1) В viewDidLoad звоните renderMyView.

2) После поворота устройства не метод вызова renderMyView

3) Замените renderMyView на этот:

- (void)renderMyView
{
    if(isPortrait)
    {
         pageControl.frame = CGRectMake(200, 976, 0, 0);
    } else {
         pageControl.frame = CGRectMake(200, 720, 0, 0);
    }
    pageControl.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin;
}

Итак, не звоните моему renderMyView больше одного раза.AutoresizingMask сделает все, что вам нужно.

Скажите, пожалуйста, работает ли он для вас.

PS: Для получения дополнительной информации о autoresizingMask прочитайте документацию UIView..

1 голос
/ 30 апреля 2013

, вероятно, очень старый вопрос, но я поделюсь своим способом центрирования UIPageControl. Просто установите ширину UIPageControl равной ширине ширины границ вида. Итак, в портретном режиме это будет 768, а в пейзаже - 1024. У меня это работает.

0 голосов
/ 20 сентября 2011

Установите маску автоматического изменения размера UIView в коде:

pageControl.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin;

Или вы также можете сделать это в Интерфейсном Разработчике.

...