#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 строки подряд. Я исправил приведенный выше код.