iPhone X上默認(rèn)每個(gè)控制器底部的Home Indicator都是默認(rèn)不隱藏的,會(huì)一直顯示. 對(duì)于想要在控制器中實(shí)現(xiàn)全屏的效果,不希望被Home Indicator影響效果, 需要重寫(xiě)
prefersHomeIndicatorAutoHidden()
方法:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
// 進(jìn)入此控制器,Home Indicator將會(huì)顯示, 若返回true,在此界面無(wú)操作的時(shí)候,Home Indicator將會(huì)自動(dòng)隱藏, 返回false將會(huì)一直顯示
override func prefersHomeIndicatorAutoHidden() -> Bool {
return true
}
}
需要注意的是,只重寫(xiě)控制器的此方法的這種情況只適用于此控制器沒(méi)有父控制器的情形.而絕大部分的應(yīng)用都是以TabBarController或NavigationController作為window的根控制器,ViewController來(lái)展示內(nèi)容,這時(shí)還需要重寫(xiě)TabBarController 及NavigationController 的childViewControllerForHomeIndicatorAutoHidden()
方法
對(duì)于上圖關(guān)系的應(yīng)用,需要設(shè)置TabBarController的childViewControllerForHomeIndicatorAutoHidden()
采用每個(gè)navigationController中的設(shè)置, 并在navigationController中的childViewControllerForHomeIndicatorAutoHidden()
中設(shè)置為當(dāng)前顯示的控制器
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
}
// 返回nil, 則自己的prefersHomeIndicatorAutoHidden()中的設(shè)置會(huì)生效
// 這里返回當(dāng)前選中的控制器,使用該子控制器的設(shè)置
override func childViewControllerForHomeIndicatorAutoHidden() -> UIViewController? {
return selectedViewController
}
// 注意: 此方法中的設(shè)置生效的前提是上面這個(gè)方法返回nil
override func prefersHomeIndicatorAutoHidden() -> Bool {
return true
}
}
class NavagationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func childViewControllerForHomeIndicatorAutoHidden() -> UIViewController? {
return self.viewControllers.last
}
// 若希望在所有子控制器的界面都實(shí)現(xiàn)自動(dòng)隱藏,則返回true, 并且在上面的方法中返回nil,注意一定要重寫(xiě),不重寫(xiě)是沒(méi)效果的
override func prefersHomeIndicatorAutoHidden() -> Bool {
return true
}
}
這樣就可以在每個(gè)控制器中控制是否自動(dòng)隱藏Home Indicator了