2013-04-25 2 views
1

Существует много разговоров о настройке UIBarButtonItem с пользовательским представлением в виде UIButton. Это совершенно ясно. То, что я не нашел до сих пор, и что меня удивляет, заключается в том, что нет никаких упоминаний о пользовательских UIBarButtonItems, которые обрабатывают вращение интерфейса - это обычное поведение при повороте iPhone, кнопки штрих-кода сжимаются по вертикали. Однако, если вы настроили UIBarButtonItem обычным способом (путем вызова метода initWithCustomView:), он останется без сжатия после поворота в ландшафтную ориентацию. Есть ли обходные пути для этого?Настройка UIBarButtonItem и вращения интерфейса

ответ

1

Ну, я нашел решение с обработкой UIApplicationDidChangeStatusBarOrientationNotification в обычном UIBarButtonItem классе довольно приличный.

0

Я думаю, вы должны перестроить UIBarButtonItem (свой пользовательский UIButton) с новым ориентационным изображением и текстом или сбросить кадр пользовательского вида.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    UIButton *rightItemButton = (UIButton *)self.navigationItem.rightBarButtonItem.customView; 
    //resize the frame 
    if (isLandscape) { 

    } else if (isPortrait) { 
     .... 
    } 
} 
+0

Вы имеете в виду свойства кнопки изменения из 'didRotateFromInterfaceOrientation:' метод контроллера вида? по моему мнению, его очень уродливая с точки зрения дизайна кода - у контроллеров просмотра есть достаточно работы, помимо корректирующих кнопок, которые представляют собой пользовательские виды барбитонов, которые являются дочерними элементами uinavigationitem, которые размещены на uinvaigationbar - безумные! Надеюсь, у яблока есть лучшее обходное решение для этого ... – peetonn

+0

Да, потому что это ваш пользовательский вид, вы должны контролировать его самостоятельно, также вы можете переопределить макеты (void) layoutSubviews в ViewControllers для сброса размера и положения любых подзонов – shanegao

+0

ну, да, я согласен ... но все же, на мой взгляд, такие тонкие настройки не позволяют нам использовать «хороший» дизайн кода - например, в этом случае я вижу более логичным создание такой кнопки на панели, которая будет полностью автономной и обрабатывать его «содержание». и я думаю, что в частности эта ситуация может быть решена, если яблоко предоставит какой-либо «didAdjustFrameForNewOrientation:» вызов или smth, как это. – peetonn

0

Если вы можете добавить UIBarButtonItem от IB (вы не должны создать его программно) можно установить пружины и распорки, чтобы получить ваше поведение по умолчанию. Это решение сработало для меня.

+0

hm. есть только ширина и вставки изображения могут быть настроены. но в любом случае, что, если есть необходимость в 'UIBarButtonItem' с пользовательским представлением, как я заявил в вопросе? (его мой случай) – peetonn

+0

Дело в том, что если вы хотите настроить пользовательский UIBarButton в своей навигационной панели от IB, вы можете перетащить UIBarButtonItem на панель навигации, после чего перетащите UIButton внутри UIBarButtonItem, тогда вы можете настроить, как вам нравится UIButton (фон, название и т. д.). Для вашего случая я думаю, вы можете создать пользовательский UIView, в котором есть кнопка (или другие виды) внутри нее, а также установить весну и распорки, чтобы получить ваше поведение. ПРИМЕЧАНИЕ. Я не тестировал это дело, но я не вижу причин, почему это не может работать. – danypata

+0

hm, похоже, может работать, если в вашем xib есть 'UINavigationController'. однако, это не мое дело. но в любом случае спасибо за подсказку! – peetonn

Смежные вопросы