iOS — UIToolbar изменен после возврата из фонового режима

#ios #uinavigationcontroller #uitoolbar

#iOS #uinavigationcontroller #uitoolbar

Вопрос:

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

В настоящее время я изменяю его только через self.naviagtionController.toolbar.frame = CGRectMake(X,Y,W,H);

Также я использую панель инструментов NavigationController. (и у меня есть очень конкретная причина для использования панели инструментов NavigationControllers)

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

1. когда и где вы это делаете?

2. Я пробовал это непосредственно в AppDelegate, и я также попытался установить их в UIViewController, оба, похоже, изменяют размер панели инструментов до стандартных размеров после того, как приложение возвращается на передний план.

3. Пытались ли вы сделать это в методе viewWillAppear вашего контроллера?

4. Да, хотя viewWillAppear не вызывается, когда приложение возвращается на передний план.

Ответ №1:

Таким образом, ваша проверка приложения стала активным уведомлением, а затем установила размер панели инструментов. Затем вы устанавливаете пользовательский размер, и после установки размера появляется что-то и изменяет его обратно на размер по умолчанию. Это все?

Я думаю, что был бы лучший способ сделать это, но…

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

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        // set toolbar frame
        self.naviagtionController.toolbar.frame = CGRectMake(X,Y,W,H);
    });
});
  

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

1. Этот код, похоже, не работает для меня… похоже, что dispatch_get_main_queue не принимает эти параметры. По крайней мере, Xcode не говорит мне, что это не так.

2. Вы правы. Мне не удалось скопировать и вставить. dispatch_get_main_queue не принимает параметров. Я оставил их, когда вырезал и вставил 2 строки подряд. Я исправил приведенный выше код.