【iOS】视频全屏退出后,导航栏向上偏移20

xiaoxiao2021-02-28  15

问题描述

当网页的视频全屏播放时(调用了原生的播放器播放),然后点击左上角的完成退出时,导航栏向上偏移20。如下图所示:

解决方案

查了许多资料,一般提供一下两种方案:

// 第一种 self.automaticallyAdjustsScrollViewInsets = false // 第二种 self.navigationController?.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0) // OC 对应的是UIRectEdgeNone

然鹅,以上两种方法都没有解决我的问题。

最后,在stackoverflow找到了一个解决方法,然后自己改进了以下。原文是在viewDidLoad调用,发现会有问题。于是改了调用时机,改为旋转屏幕时,才调用。那么,我们就需要监听屏幕的旋转。监听方法详细请参考该博客。

我是在自定义的NavigationController调用以下代码的

1、在ViewDidLoad注册通知

NotificationCenter.default.addObserver(self, selector: #selector(NavigationController.didRotate(noti:)), name: Notification.Name.UIApplicationDidChangeStatusBarOrientation, object: nil) }

2、监听事件,手动设置navigationBar.frame

@objc fileprivate func didRotate(noti: Notification) { let windowFrame = UIScreen.main.applicationFrame // 偏移的原因是退出全屏时,app还没反应过来,还保持的全屏状态(全屏状态下,状态栏是会做调整的),因此我要设备是全屏状态下做处理,这就是这里的判断条件 if !UIDeviceOrientationIsPortrait(UIDevice.current.orientation) { self.navigationBar.frame = CGRect(x: 0, y: 0, width: windowFrame.width, height: 64) } }

参考链接

https://stackoverflow.com/questions/9260008/uinavigationcontrollers-view-and-20-points-offset

转载请注明原文地址: https://www.6miu.com/read-1100155.html

最新回复(0)