У меня есть контроллер вида со строкой строки состояния Light, а затем пользователь может нажать кнопку, которая представляет собой игровой стол Game Center. Тем не менее, я хочу, чтобы контроллер модального представления имел стиль .Default
, когда контроллер родительского представления имеет стиль .LightContent
. Возможно ли это сделать? Может ли модальный контроллер просмотра иметь другой стиль, чем контроллер родительского представления? Если да, то как мне это достичь?Modal View Controller с другим стилем StatusBar, чем ParentViewController
ответ
Ну, я думаю, что я нашел хорошее решение для моего вопроса. В основном при представлении модально у вас есть completionHandler
. В completionHandler
поместить эти строки коды, когда вы представляете вид модальный:
self.setStatusBarStyle(.Default)
self.setNeedsStatusBarAppearanceUpdate()
Когда отпускаете вид модальный:
self.setStatusBarStyle(.LightContent)
self.setNeedsStatusBarAppearanceUpdate()
Убедитесь, что не выполнять preferredStatusBarStyle в вашем View Controller , Этот метод меня отбросил, и если вы реализуете метод preferredStatusBarStyle, он переопределит метод setStatusBarStyle, и этот трюк не будет работать. В принципе НЕ реализуйте preferredStatusBarStyle.
У меня была та же проблема. Мое решение было переопределять: GKGameCenterViewController
класс Тогда я следовал answer here: Я добавил preferredStatusBarStyle()
метод в мой взгляд, переопределение контроллер и установить UIViewControllerBasedStatusBarAppearance
NO
к в .plist файле.
Хорошо, спасибо. –
Только один вопрос, хотя по какой-то причине, когда я использую ваше решение, весь экран статуса приложения выглядит черным. Как у меня есть белые цвета строки состояния? Есть ли способ сделать это? – Harish
Я также поместил 'preferredStatusBarStyle()' в мой 'BaseViewController', который я использую как класс parrent для всех моих контроллеров View. –
Это решило для меня:
modalViewController.modalPresentationStyle = .overCurrentContext
Следующий ответ основан на @ решения Хариш в. В вашей конкретной UIViewController
(или собственный базовый класс) добавить:
var statusBarStyle: UIStatusBarStyle = .lightContent
override var preferredStatusBarStyle: UIStatusBarStyle {
return statusBarStyle
}
И позвони:
self.statusBarStyle = .default // or .lightContent
self.setNeedsStatusBarAppearanceUpdate()
Всякий раз, когда вы хотите изменить статус стиля бар.
Определенно возможно. В каждом контроллере представления вы переопределяете '- preferedStatusBarStyle:'? – ajfigueroa
@ajfigueroa На самом деле, поскольку я представляю таблицу лидеров Game Center, у меня нет контроллера вида для Game Center Leaderboard. – Harish