В моем файле .plist для параметра « Просмотр отображения строки состояния на основе контроллера » установлено значение NO
. Но после UIImagePickerController
этого мое приложение ведет себя так, как если бы опция была установлена на YES
.
В своем приложении я представляю VC с расширением UIImagePickerController
.
Проблема бывает так:
- После отображения средства выбора фотографий при выборе библиотеки фотографий цвет текста в строке состояния изменяется.
- Затем один раз
UIImagePickerController
отклоняется, интервалы в строке состояния меняются для остальной части моего приложения, а вся панель навигации для других контроллеров отображается под строкой состояния.
Есть ли способ решить эту проблему без управления строкой состояния в моих контроллерах представления?
Ответы:
Ни одно из вышеперечисленных решений не помогло мне, но, объединив ответы Rich86man и iOS_DEV_09, я получил постоянно работающее решение:
а также
По поводу этого потрясающего решения. Для 2014 / iOS8 я обнаружил, что в некоторых случаях вам нужно ТАКЖЕ включить
prefersStatusBarHidden
и, возможно,childViewControllerForStatusBarHidden
Итак ...Надеюсь, это кому-то поможет
источник
Сегодня я столкнулся с этой же проблемой. Вот мое решение.
В контроллере представления, который вызывает средство выбора изображений, установите себя в качестве делегата средства выбора изображений. (Вы, наверное, уже это делаете)
Поскольку UIImagePickerController является типом контроллера навигации, вы также устанавливаете себя в качестве делегата UINavigationController. Затем :
Замените UIStatusBarStyleLightContent любым стилем, который вам нужен.
источник
Принятый ответ будет работать, если для параметра «Просмотр внешнего вида строки состояния на основе контроллера» установлено значение «НЕТ» в файле .plist. Если вам действительно нужно управлять строкой состояния в некоторых других контроллерах представления и для этого параметра установлено значение YES, другой способ заставить UIImagePickerController вести себя правильно - это подклассифицировать его
источник
я столкнулся с той же проблемой.
вот мое решение. поместите это в viewWillAppear контроллера представления, из которого вы открываете окно выбора изображения
источник
Вы можете попробовать это. Я думаю, что needsStatusBarApperanceUpdate подойдет.
источник
Я обнаружил, что это обеспечивает правильное обращение, состоит из двух частей.
сам UIImagePickerController представляет контроллеры представления, поэтому этот делегат работает для всех докладчиков в стеке.
viewWillAppear гарантирует, что сам этот контроллер представления всегда сбрасывается всякий раз, когда представляющий контроллер представления прекращает работу над ним.
источник
У меня такая же проблема. Добавьте в информационный лист: «Просмотр внешнего вида строки состояния на основе контроллера» со значением «НЕТ»
Пример здесь https://stackoverflow.com/a/19211669
Это решение мне подходит.
источник
Вероятно, это ошибка. Я решил проблему, установив для параметра "Отображение строки состояния на основе контроллера" значение ДА и вставив в каждый контроллер представления следующий код:
Затем мое приложение ведет себя так, как ожидалось.
источник
Чтобы скрыть строку состояния в UIImagePicker:
-
и когда UIImagePicker отклоняется, чтобы скрыть строку состояния в контроллере просмотра, используйте следующий код:
источник
попробуй это ....
это будет работать в обоих случаях, то есть используете ли вы PresentModalViewController и pushViewController
делегировать методы
источник
Все вышеперечисленное у меня не сработало. Я решил проблему, изменив стиль презентации на:
источник
Ни одно из вышеперечисленных решений не помогло мне.
Я представляю UIImagePickerController как контроллер модального представления. После увольнения UIImagePickerController состояние строки состояния было:
Решение, которое устранило проблему для меня, заключалось в восстановлении statusBarOrientation после увольнения UIImagePickerController:
источник
Этот код помог мне настроить стиль строки состояния.
РЕДАКТИРОВАТЬ: это решение работает, если "Просмотр появления строки состояния на основе контроллера" == ДА
источник
Все ответы выше в порядке и могут помочь.
У меня была такая же проблема с управлением приложением, запущенным под разными версиями iOS .
Затем в делегате:
источник
Еще одно решение, которое может сработать в некоторых ситуациях.
источник
Вы пробовали позвонить,
[self setNeedsStatusBarAppearanceUpdate]
когда снова появляется ваш контроллер представления представления?источник
Я пытаюсь скрыть строку состояния в UIImagePickerController в iOS7, но до сих пор не знаю, как это сделать. я использую
в ViewController, которые вызывают UIImagePickerController, и установите «View controller-based status bar appearance = NO» в файле plist. Надеюсь, это поможет.
источник
попробуй это :
и в реализации протокола используйте это:
источник
Это решило это для меня ...:
источник
Ничто здесь конкретно не решало проблему, которая у меня была (и, возможно, у OP тоже), поэтому я подумал, что поделюсь своим ответом. Вместо того, чтобы скрывать строку состояния, что, как мне кажется, является ошибочным решением (я заметил, что иногда мое приложение оставалось в состоянии, когда строка состояния была скрыта, хотя этого быть не должно). Вместо этого я решил поиграть с расширением
UIStatusBarStyles
.Когда UIImagePickerController представляет свое представление, я устанавливаю стиль строки состояния по умолчанию, поскольку цвет фона по умолчанию - светло-серый.
Затем, когда средство выбора изображений закрывается, я снова устанавливаю его на
UIStatusBarStyleLightContent
.источник
В этом случае мы используем 2 шага
На первом этапе: добавьте в info.plist: «Просмотр внешнего вида строки состояния на основе контроллера» со значением «NO».
На втором этапе: используйте / вызовите этот код с делегатом UIImagePickerController
В случае iOS-7 добавить еще одну функцию
источник
Что касается iOS 8.1, похоже, что они наконец исправили эту ошибку! Мне удалось удалить все использованные мной обходные пути из своего кода.
источник
При использовании стандартного поведения iOS 8 у меня возникли проблемы с отображением строки состояния, когда я хотел ее скрыть.
Решение, которое я нашел, заключалось в том, что сразу после вызова
presentPopover
из моего контроллера представления я сделал:Мне также пришлось добавить это в мой главный контроллер представления:
источник
Итак, у меня была эта проблема, и я смог решить ее, просто реализовав одну функцию делегата. Фон моей строки состояния черный, поэтому UIStatusBarStyle для моего приложения - .LightContent. Когда я представил UIImagePickerController для выбора фотографии из хранилища устройства, строка состояния была в порядке. Однако при нажатии на каталог, такой как «Фотопленка» или «Избранное», при эффективном нажатии на стек навигации, строка состояния исчезает. При выборе фото вообще не было строки состояния; при отключении другого контроллера модального представления присутствовала только батарея, что указывает на то, что остальная часть строки состояния также может быть черной.
Я пробовал некоторые другие решения, такие как расширение UIImagePickerController, но в Swift вы не можете переопределить использование расширений. Затем я попытался создать подкласс UIImagePickerController и попытался скрыть его строку состояния на viewWillAppear () и отобразить строку состояния на viewWillDisappear. Мне удалось увидеть скрытие строки состояния с помощью анимации .Slide, но поскольку строка состояния была невидимой при выборе каталога, я не смог увидеть скрытую строку состояния. Опять же, зеленая батарея вернулась, а остальная часть строки состояния стала невидимой после закрытия модального контроллера представления. Я также попытался переопределить prefersStatusBarHidden (), но эта функция никогда не вызывалась, поэтому я попытался вызвать setNeedsStatusBarAppearanceUpdate (), чтобы убедиться, что система вызывает prefersStatusBarHidden (), но она все еще не вызывается. Также, предлагается скрыть строку состояния в методе делегата navigationController willShowViewController. Еще раз, все это скрывает строку состояния, что не решает проблему. Оказывается, похоже, что стиль строки состояния изменяется при нажатии на стек навигации UIImagePickerController. Чтобы решить проблему полностью, мне не пришлось писать расширения или подкласс UIImagePickerController. Все, что вам нужно сделать, это установить делегата и установить неизменный стиль строки состояния. Это добавление создало впечатление, будто проблемы никогда не существовало. кажется, что стиль строки состояния изменяется после нажатия на стек навигации UIImagePickerController. Чтобы полностью решить проблему, мне не пришлось писать расширения или подкласс UIImagePickerController. Все, что вам нужно сделать, это установить делегата и установить неизменный стиль строки состояния. Это добавление создало впечатление, будто проблемы никогда не существовало. кажется, что стиль строки состояния изменяется после нажатия на стек навигации UIImagePickerController. Чтобы решить проблему полностью, мне не пришлось писать расширения или подкласс UIImagePickerController. Все, что вам нужно сделать, это установить делегата и установить неизменный стиль строки состояния. Это добавление создало впечатление, будто проблемы никогда не существовало.
источник
На самом деле я нашел лучший способ установить цвет фона строки состояния в средстве выбора изображений. В основном вам нужно установить backgroundImage из navigationBar в nil, потому что по умолчанию в Image Picker используется backgroundImage как белое изображение.
источник