我试图在我的一个UIViewControllers(Swift 4)中隐藏状态栏。
首先,我在Info.plist
中将查看基于控制器的状态栏外观设置为是。
我覆盖了控制器中的prefersStatusBarHidden
属性:
override var prefersStatusBarHidden: Bool {
return true
}
viewDidLoad()
中,我添加了setNeedsStatusBarAppearanceUpdate()
函数来强制读取prefersStatusBarHidden
属性。 毕竟,我仍然会在UIViewController
上看到状态栏。
有人可以帮帮我吗?
答案 0 :(得分:22)
只需添加以下代码,即可隐藏任何或所有视图控制器中的状态栏:
override var prefersStatusBarHidden: Bool {
return true
}
任何包含该代码的视图控制器都会默认隐藏状态栏。
如果要为状态栏设置动画,请在视图控制器上调用 setNeedsStatusBarAppearanceUpdate() - 这将强制再次读取 prefersStatusBarHidden ,你可以返回一个不同的值。如果需要,您对 setNeedsStatusBarAppearanceUpdate()的调用实际上可以在动画块内,这会导致状态栏隐藏或以平滑的方式显示。
答案 1 :(得分:6)
你可能已经找到了自己的解决方案,但我这样做了:
override func viewWillAppear(_ animated: Bool) {
// Sets the status bar to hidden when the view has finished appearing
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
// Sets the status bar to visible when the view is about to disappear
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.isHidden = false
}
答案 2 :(得分:5)
虽然有些实现更清晰,例如:
UIApplication.shared.isStatusBarHidden = true
在过渡期间有一些奇怪的剪辑动画。虽然更详细,但我更喜欢@ MachTurtle的解决方案:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
if let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as? UIView{
statusBar.isHidden = true
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.isHidden = false
}
尝试一下,对我很有用。
答案 3 :(得分:3)
答案 4 :(得分:1)
使用以下代码
{floor(x-y)%1D00:00}[d1;d2]
这是我发现的唯一可以在iOS11中运行的东西。
你可以写在UIApplication.shared.isStatusBarHidden = true
或在' viewWillAppear'你didFinishLaunchingWithOptions
享受。
答案 5 :(得分:1)
如果您以模态方式呈现视图控制器,请尝试
viewController.modalPresentationCapturesStatusBarAppearance = true
答案 6 :(得分:1)
正如您所说,您正在使用UINavigationController导航到自定义视图控制器。我想您已经将Custom View控制器设置为UINavigationController的根视图。在这种情况下,在自定义视图控制器中覆盖var preferredsStatusBarHidden无效,但是您将必须继承UINavigation Controller的子类,并在此处覆盖属性,如下所示:-
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = UIStoryboard.init(name: "ProductListing", bundle: Bundle.main).instantiateViewController(withIdentifier: "ProductListingViewController") as? ProductListingViewController
(superview?.next as? ProductListingViewController)?.navigationController?.pushViewController(vc!, animated: true)}
答案 7 :(得分:1)
当您尝试在UINavigationStack中重载ViewController的状态栏属性时-您需要在下面进行扩展
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return self.topViewController
}
}
然后您的重载属性将变为活动状态
答案 8 :(得分:0)
答案 9 :(得分:0)
对于我来说,这些都不适用于iOS 11中的转换项目。这就是我所做的。我在AppDelegate中添加了这段代码
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
application.isIdleTimerDisabled = true
application.isStatusBarHidden = true
return true
}
答案 10 :(得分:0)
只需将视图的“顶部空间限制”从“安全”区域更改为“超级视图”即可。它将在状态栏下拖动您的视图,因此无需隐藏它{{0 }}] 1
答案 11 :(得分:0)
我发现在视图控制器中未调用prefersStatusBarHidden
,因为我使用的是自定义容器视图,因此需要将状态栏隐藏责任转发给子视图控制器。如果对我来说,在容器视图控制器中实现var childForStatusBarHidden: UIViewController? { return childViewController }
是固定的。
答案 12 :(得分:0)
如果它是子视图控制器,则需要在容器视图控制器中编写代码
array_filter
答案 13 :(得分:0)
将此添加到您的 info.plist
<key>UIStatusBarHidden</key>
<true/>
答案 14 :(得分:0)
我正在寻找它,而对我来说是一个工作
快速5
$("#NoeticeBoardGetAllFrm").submit(function(e) {
e.preventDefault();
console.log( new FormData(this));
$.ajax({
url: $("#NoeticeBoardGetAllUrl").val(),
type: 'POST',
headers: {'Accept': 'application/json','Content-Type': 'application/json',
'DBAuth': $("#DBAuth").val(),'Authorization': $("#Authorization").val(),},
dataType: 'json',
data: new FormData(this),
cache: false,
contentType: false,
processData: false,
success: function (data) {
if (data.error == 0) {
$("#NoeticeBoardGetAllResult").html("Record fetched successfully!");
$("#NoeticeBoardGetAllResult").addClass("alert alert-success");
} else {
$("#NoeticeBoardGetAllResult").html(data.errmsg);
$("#NoeticeBoardGetAllResult").addClass("alert alert-warning");
}
}, statusCode: {
500: function (data) {
$("#NoeticeBoardGetAllResult").html("Something went wrong!");
$("#NoeticeBoardGetAllResult").addClass("alert alert-danger");
},
401: function (data) {
$("#NoeticeBoardGetAllResult").html("Login Failed");
$("#NoeticeBoardGetAllResult").addClass("alert alert-danger");
}
}
});
setTimeout(function(){ resetResult(); }, 3000);
});