renzifeng / ZFPlayer

Support customization of any player SDK and control layer(支持定制任何播放器SDK和控制层)
MIT License
7.07k stars 1.75k forks source link

关于UIViewController+ZFPlayerFixSafeArea.m #1248

Open dadongbanfu opened 3 years ago

dadongbanfu commented 3 years ago

这个分类不能用。 第一个问题在第48行代码: if ( isFullscreen && (insets.top != 0 || [self zf_containsPlayerView] == NO))

这里应该是要么在isFullscreen前加个非: if ( !isFullscreen && (insets.top != 0 || [self zf_containsPlayerView] == NO)) 要么把isFullscreen后面的&&改成||: if ( isFullscreen || (insets.top != 0 || [self zf_containsPlayerView] == NO))

否则这if条件很难为YES,大括号里的语句也就不会执行。 然后只要你进过播放页,哪怕立马退出,当你切换到其他tab bar里的tab时,那里面的导航栏或者那里的二级页面的导航栏的布局很可能已经跑掉了。

这个条件具体要怎么改没太研究了,因为这还不是最大的问题。第二个问题是这里swizzle了私有api: _setContentOverlayInsets:andLeftMargin:rightMargin:

我翻了下issue列表,这个分类应该是某位网友借鉴SJVideoPlayer的代码改写过来的。 我去SJVideoPlayer的issues搜了下,结果19年底到20年初就有人因为这个私有api被拒过了。 截屏2021-10-19 下午5 27 02 截屏2021-10-19 下午5 30 18

SJVideoPlayer作者的修改方案很简单粗暴,直接把这个私有api以base64字符串的方式给导进来了。

导入这个分类的最初目的是为了解决全屏状态下退到后台再回来导航栏布局跑掉的问题。 那么如果还用这个分类,首先要把条件弄清楚,然后参考SJVideoPlayer解决私有api的问题。 要么就不用这个分类,监听下app的状态,要退到后台时先退出全屏。

这个分类还有一个问题,这个swizzle的位置不对,为什么不加在ZFPlayerController的initialize或load里,却要放在ZFPlayerNotification的initialize里。

chasen-d commented 2 years ago

SJVideoPlayer作者的方案是目前唯一能解决这个全屏bug的了吧