Изменение размера UINavigationBar при вращении

У меня есть подкласс UIViewController, который обрабатывает UIView. Контроллер представления представлен модально (выдвигается из нижней части экрана). В верхней части представления я добавил панель навигации. Обратите внимание, что эта панель не обрабатывается навигационным контроллером.

Я хочу, чтобы навигационная панель уменьшалась по высоте, когда вид поворачивается в ландшафт (аналогично тому, как он ведет себя, когда он обрабатывается UINavigationController). Однако я не могу установить его маску автоматического изменения размера на гибкую высоту в IB, и это приводит к полному исчезновению панели навигации.

Есть ли способ сделать это? Как это делается UINavigationController?

P.S. Я бы предпочел не прибегать к масштабному преобразованию, так как это испортит текст в заголовке.

РЕДАКТИРОВАТЬ: я решил это с небольшой помощью, прочитайте ответ, размещенный ниже.


person MW.    schedule 01.12.2009    source источник


Ответы (2)


Вместо того, чтобы устанавливать маску автоматического изменения размера, почему бы вам просто не проверить текущую ориентацию в viewWillAppear, а также в didRotateFromInterfaceOrientation и установить соответствующий кадр?

- (void) updateNavBar {
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    if ((UIInterfaceOrientationLandscapeLeft == orientation) ||
        (UIInterfaceOrientationLandscapeRight == orientation)) {
        myNavBar.frame = CGRectMake(0, 0, 480, 34);
    } else {
        myNavBar.frame = CGRectMake(0, 0, 320, 44);
    }
}
- (void) viewWillAppear {
    [self updateNavBar];
    // ... SNIP ...
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [self updateNavBar];
    // ... SNIP ...
}
person Douglas Mayle    schedule 01.12.2009
comment
Я попробовал, но он не вел себя так, как я хотел. в частности, элементы кнопок панели и заголовок не масштабировались, поэтому верхняя часть исчезала с экрана. Кроме того, сама панель навигации фактически не масштабировалась, поэтому градиент был отключен. Я попытаюсь вручную изменить размер подвида и посмотреть, сработает ли он... - person MW.; 03.12.2009
comment
Я пытался использовать преобразования разных видов в подвиде, но не смог заставить его выглядеть красиво. - person MW.; 03.12.2009

Я нашел решение, и, оглядываясь назад, я чувствую себя довольно глупо. Мне просто нужно было включить гибкое нижнее поле в маску автоматического изменения размера панели навигации. Кредит принадлежит пользователю RayNewbie в этой теме, который указал мне на решение:

http://discussions.apple.com/thread.jspa?messageID=8295525

person MW.    schedule 03.12.2009
comment
Привет, у тебя были кнопки на панели навигации? Потому что у меня та же проблема, и, если я включу гибкое нижнее поле в маску автоматического изменения размера панели навигации, размер панели навигации изменится, а кнопки - нет. - person Sefran2; 21.02.2011
comment
обязательно добавьте navBar.autoresizesSubviews = YES;, и вам также может потребоваться установить маски автоматического изменения размера для кнопок панели навигации. - person Rik Smith-Unna; 03.08.2012
comment
Не могли бы вы опубликовать свое решение. Приведенная вами ссылка не работает. - person DCorrigan; 20.09.2014
comment
@DCorrigan, у меня больше нет кода для этого (он принадлежит предыдущему работодателю). - person MW.; 22.09.2014