Изменить размер для строки состояния вызова?

Как я могу resize представления в ответ на строку состояния вызова в моем телефоне?

Я полагал, что это просто настройка свойств изменения размера, но они не включены для корневого UIView.

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

Что вы имеете в виду, когда говорите, что «свойства изменения размера не включены для корневого UIView»?

В строке состояния вызова нет специального специального обозначения, и я не думаю, что вокруг него есть какие-либо API-интерфейсы или уведомления. Вместо этого ваши взгляды должны быть просто настроены для автоматической проверки правильности.

Попробуйте создать новое приложение на основе навигации в Xcode и изучите параметры авторазрезания в представлении таблицы в RootViewController.xib. Надеюсь, вы увидите дельта между тем, что установлено Apple и тем, что вы установили в своем проекте.

iOS будет ссылаться на ваш viewController viewWillLayoutSubviews метод всякий раз, когда есть изменение в строке состояния. Вы можете переопределить это и настроить свои объекты в соответствии с новыми границами.

 - (void)viewWillLayoutSubviews { // Your adjustments accd to // viewController.bounds [super viewWillLayoutSubviews]; } 

Вы ищете – [UIApplication statusBarFrame], и ​​в вашем UIApplicationDelegate вы должны реализовать этот метод делегата, чтобы получать уведомления о том, когда изменяется рамка строки состояния:

 - (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame 

Просмотр не может автоматически изменяться с изменением размера строки состояния, если у вас нет набора controllerов корневого представления. Первоначально я это делал в своем делете приложения, и мое приложение работало правильно во всех отношениях, за исключением того, что во время телефонных звонков оно не изменилось бы правильно.

 [self.window addSubview:rootController.view]; 

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

 [self.window setRootViewController:rootController]; 

Я обнаружил это исправление, увидев это в журнале и исследуя причину.

 Application windows are expected to have a root view controller at the end of application launch 

это работает для меня отлично, когда мое приложение работает в фоновом режиме, и я нажимаю команду + T. В моем сценарии корневой controller – это мой controller панели вкладок, и я перенастраиваю свой навигационный controller внутри каждой вкладки.

 - (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{ [UIView animateWithDuration:0.35 animations:^{ CGRect windowFrame = ((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame; if (newStatusBarFrame.size.height > 20) { windowFrame.origin.y = newStatusBarFrame.size.height - 20 ;// old status bar frame is 20 } else{ windowFrame.origin.y = 0.0; } ((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame = windowFrame; }]; 

}

Для таких представлений, как UITableView, вам обычно нужно изменить высоту ячейки таблицы, и нет другого способа сделать это, кроме как реализовать приложение: didChangeStatusBarFrame:. Но это не biggie, и вы можете установить высоту строки нецелыми значениями, если вам нужно.

Уведомление о смене кадра строки состояния

UIApplicationWillChangeStatusBarFrameNotification

Зарегистрируйтесь как наблюдатель:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameWillChange:)name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

Затем ответьте на изменение в вашем обработчике:

- (void)statusBarFrameWillChange:(NSNotification*)notification { // respond to changes }

Даже при правильной настройке автозапуска вам может потребоваться ответить на изменения. Например, представление таблицы, которое вычисляет высоту своей ячейки на основе заданного пространства на экране, может потребоваться reloadData после изменения строки состояния.

Документация

У меня была такая же проблема. Я сделал это.

  1. Открыть файл xib в IB
  2. Все элементы интерфейса по умолчанию прикреплены для перемещения вместе с верхним и показаны в свойстве «Автосоздание» в «Настройщике размеров». Итак, для элементов пользовательского интерфейса в нижней части экрана удалите ссылку сверху и вместо этого сделайте ссылку снизу. Оставь все остальное как есть.
  3. Задача решена!!!

Надеюсь, я поняла.

Вам придется обновлять представления вручную, если вы программно настраиваете frameworks просмотра

  -(void) viewDidAppear:(BOOL)animated { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameWillChange:)name:UIApplicationWillChangeStatusBarFrameNotification object:nil]; } - (void)statusBarFrameWillChange:(NSNotification*)notification { // respond to changes NSLog(@"STATUS BAR UPDATED"); NSDictionary *statusBarDetail = [notification userInfo]; NSValue *animationCurve = statusBarDetail[UIApplicationStatusBarFrameUserInfoKey]; CGRect statusBarFrameBeginRect = [animationCurve CGRectValue]; int statusBarHeight = (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication]statusBarOrientation])) ? statusBarFrameBeginRect.size.height : statusBarFrameBeginRect.size.width; NSLog(@"status bar height %d", statusBarHeight); } -(void) viewDidDisappear:(BOOL)animated { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationBackgroundRefreshStatusDidChangeNotification object:nil]; } 

Это дает вам новую высоту строки состояния, и с ее помощью вы можете соответствующим образом обновить свои фреймы.

Решение состоит в том, чтобы убедиться, что вы сделали свой оконный ключ:

 [window makeKeyAndVisible]; 

Если вы этого не сделаете, subview не будет автоматически изменяться, но, насколько мне известно, никаких других симптомов нет.

Ни одно из решений, опубликованных ранее, не работало для меня. Что для меня работало, так это то, что у меня не было ограничений, установленных для моих взглядов. В моей ситуации у меня было два разных вида контейнера в моем представлении.

Вид сцены в раскадровке.

Нижним (в списке) видом контейнера был UITableView , который не прокручивался правильно в нижней части таблицы. Причина заключалась в том, что смещение строки состояния в вызове вызывало изменение UITableView поля (верхний левый угол) UITableView , но размер оставался бы таким же. Это означало, что нижняя часть таблицы была выключена!

Решение состояло в том, чтобы правильно установить ограничение высоты авторезистировки . На скриншоте, приведенном ниже, это вертикальные стрелки в середине windows Autoresizing .

введите описание изображения здесь

  • Панель не получает фокус
  • Панель c # для рисования графики и прокрутки
  • В каком порядке панели наиболее эффективны с точки зрения времени и производительности?
  • Создание SearchView, который выглядит как руководство по разработке материалов
  • Как скрыть навигационную панель постоянно в андроид-активности?
  • Панель навигации под панелью инструментов
  • self.title устанавливает заголовок navigationController и tabBarItem? Зачем?
  • Чат клиента смайликов окно JAVA
  • Давайте будем гением компьютера.