2016-02-06 7 views
2

У меня есть контроллер вида со строкой строки состояния Light, а затем пользователь может нажать кнопку, которая представляет собой игровой стол Game Center. Тем не менее, я хочу, чтобы контроллер модального представления имел стиль .Default, когда контроллер родительского представления имеет стиль .LightContent. Возможно ли это сделать? Может ли модальный контроллер просмотра иметь другой стиль, чем контроллер родительского представления? Если да, то как мне это достичь?Modal View Controller с другим стилем StatusBar, чем ParentViewController

+0

Определенно возможно. В каждом контроллере представления вы переопределяете '- preferedStatusBarStyle:'? – ajfigueroa

+0

@ajfigueroa На самом деле, поскольку я представляю таблицу лидеров Game Center, у меня нет контроллера вида для Game Center Leaderboard. – Harish

ответ

1

Ну, я думаю, что я нашел хорошее решение для моего вопроса. В основном при представлении модально у вас есть completionHandler. В completionHandler поместить эти строки коды, когда вы представляете вид модальный:

self.setStatusBarStyle(.Default) 
self.setNeedsStatusBarAppearanceUpdate() 

Когда отпускаете вид модальный:

self.setStatusBarStyle(.LightContent) 
self.setNeedsStatusBarAppearanceUpdate() 

Убедитесь, что не выполнять preferredStatusBarStyle в вашем View Controller , Этот метод меня отбросил, и если вы реализуете метод preferredStatusBarStyle, он переопределит метод setStatusBarStyle, и этот трюк не будет работать. В принципе НЕ реализуйте preferredStatusBarStyle.

2

У меня была та же проблема. Мое решение было переопределять: GKGameCenterViewController класс Тогда я следовал answer here: Я добавил preferredStatusBarStyle() метод в мой взгляд, переопределение контроллер и установить UIViewControllerBasedStatusBarAppearanceNO к в .plist файле.

+0

Хорошо, спасибо. –

+0

Только один вопрос, хотя по какой-то причине, когда я использую ваше решение, весь экран статуса приложения выглядит черным. Как у меня есть белые цвета строки состояния? Есть ли способ сделать это? – Harish

+0

Я также поместил 'preferredStatusBarStyle()' в мой 'BaseViewController', который я использую как класс parrent для всех моих контроллеров View. –

0

Это решило для меня:

modalViewController.modalPresentationStyle = .overCurrentContext 
0

Следующий ответ основан на @ решения Хариш в. В вашей конкретной UIViewController (или собственный базовый класс) добавить:

var statusBarStyle: UIStatusBarStyle = .lightContent 
override var preferredStatusBarStyle: UIStatusBarStyle { 
    return statusBarStyle 
} 

И позвони:

self.statusBarStyle = .default // or .lightContent 
self.setNeedsStatusBarAppearanceUpdate() 

Всякий раз, когда вы хотите изменить статус стиля бар.