Просмотр изменений фрейма на панели навигации «Скрыть / показать»?

#ios #objective-c #iphone #cocoa-touch #uinavigationcontroller

#iOS #objective-c #iPhone #cocoa-touch #UINavigationController

Вопрос:

В моем приложении,

У меня есть навигационный контроллер с контроллером корневого представления.

Чтобы показать / скрыть панель навигации, которая работает нормально.

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    BOOL navbarhide=[self.navigationController.navigationBar isHidden];
    [self.navigationController setNavigationBarHidden:!navbarhide animated:YES];


}
  

Работает хорошо, но,

Когда панель навигации скрыта, просмотрите изменения фрейма.

Когда панель навигации не скрыта, тогда просматривайте изменения фрейма.

Когда панель навигации не скрыта .. нажмите кнопку, и источник представления находится под панелью, я не хочу этого, я хочу, чтобы он оставался в начале панели навигации [вверху страницы]

Хорошо, что вид находится в исходном положении, когда панель скрыта. Я хочу, чтобы вид оставался в этой позиции и поворачивал панель quot;Скрыть / показатьquot; без изменения рамки представления.

Заранее спасибо…

Редактирование настройки set self.view.frame не оказывает никакого эффекта.

Ответ №1:

У меня такая же проблема. В моем проекте это связано с тем, что вид является видом прокрутки. Если ваш вид представляет собой вид прокрутки или табличный вид, вы можете попробовать это:

Я добавляю приведенный ниже код в контроллер.

 self.automaticallyAdjustsScrollViewInsets = NO;
  

Надеюсь, это может вам помочь.

Ответ №2:

Вы не можете изменить фрейм self.view . Я не использую setNavigationBarHidden: скрытую панель навигации, а напрямую меняю фрейм self.NavigationController.NavigationBar. Таким образом, self.view.frame не изменится.

 CGRect frame = (navBarhidden) ? CGRectMake(0, -24,self.view.bounds.size.width,44) :      CGRectMake(0, 20,self.view.bounds.size.width,44);
self.navigationController.navigationBar.frame = frame;
  

Комментарии:

1. но это оставляет черное пространство на его старом месте.

Ответ №3:

У меня возникла эта проблема при отображении полноэкранного режима UIView. Изменение размера фрейма сработало для меня. (Swift)

скрытие панели навигации:

     self.navigationController!.navigationBar.hidden = true
    self.view.frame.origin.y -= 64
    self.view.frame.size.height  = 64.0
  

снова отображается панель навигации:

     self.navigationController!.navigationBar.hidden = false
    self.view.frame.origin.y  = 64
    self.view.frame.size.height -= 64.0
  

Ответ №4:

Я думаю, что это функция по умолчанию, которая не может быть изменена вами, но вы меняете положение кнопки, используя следующий код

MyButton.frame = CGRectMake(X, Y, высота, ширина);

после скрытия панели навигации.

Комментарии:

1. на самом деле это тестовый код, который я хочу внедрить в свой app…so если ты сможешь добраться..

2. Когда вы нажимаете на кнопку, измените значения MyButton. Измените значения и попробуйте это. Я думаю, у вас будет свое решение.

3. Да, я могу перемещать кнопку, но в моем реальном приложении у меня много компонентов, поэтому перемещать компоненты неудобно !!!1

4. ОК. Так что попробуйте в реальном приложении, если у вас возникнут какие-либо трудности, тогда спросите меня.

Ответ №5:

я думаю, это может вам помочь

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
BOOL navbarhide=[self.navigationController.navigationBar isHidden];
[self.navigationController setNavigationBarHidden:!navbarhide animated:YES];
 if(navbarhide)
 self.view.frame=CGRectMake(0,0, 320, 480);
 else
  self.view.frame=CGRectMake(0,44, 320, 480);
 }
  

Комментарии:

1. это не влияет, потому что навигация начинает скрываться после установки фрейма. и удаляет то, что вы сделали.

Ответ №6:

измените self.view.frame при отображении и скрытии панелей навигации

Ответ №7:

 scrollView.contentInsetAdjustmentBehavior = .never
  

Комментарии:

1. Ответы только для кода улучшены с некоторым объяснением.