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

Как я могу 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 .

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

    Interesting Posts

    Учебник по настройке Linux-машины с 3 мониторами?

    Как найти самый низкий общий предк двух узлов в любом двоичном дереве?

    Как повторить попытку после исключения?

    Outlook 2007 – ВСЕ ВСЕ

    Создание нескольких исполняемых файлов с аналогичными правилами

    Загрузите ресурс, содержащийся в банке

    Отслеживание положения прокрутки и уведомление об этом других компонентах

    Есть ли способ заставить ПК выглядеть как USB-накопитель на устройстве, которое считывает содержимое с USB-накопителя?

    Использование отражения для изменения статического финального файла File.separatorChar для модульного тестирования?

    Различия в использовании функций «const cv :: Mat &», «cv :: Mat &», «cv :: Mat» или «const cv :: Mat» как параметры функции?

    ОЗУ на моем компьютере не работает?

    Каковы некоторые параметры шаблона шаблона?

    Неожиданный выпуск программы Bubblesort с MSVC vs TCC

    Используйте карту Nvidia optimus для выхода HDMI

    Почему драйвер JDBC должен быть помещен в папку TOMCAT_HOME / lib?

    Давайте будем гением компьютера.