故事板中设备的选择使iphone x和以前版本的UI有所不同-视频播放器:ios swift

故事板中设备的选择使iphone x和以前版本的UI有所不同-视频播放器:ios swift,ios,swift,ios-autolayout,iphone-x,Ios,Swift,Ios Autolayout,Iphone X,嘿,伙计们,我有一个奇怪的问题-我正在用视频播放器播放视频。用于相同用途的代码为: let url = URL(string: "xxxxxxxxxx.mp4") player = AVPlayer(url: url!) playerLayer = AVPlayerLayer(player: player) playerLayer.videoGravity = .resize // make the layer the same size as the conta

嘿,伙计们,我有一个奇怪的问题-我正在用视频播放器播放视频。用于相同用途的代码为:

let url = URL(string: "xxxxxxxxxx.mp4")
    player = AVPlayer(url: url!)
    playerLayer = AVPlayerLayer(player: player)
    playerLayer.videoGravity = .resize
    // make the layer the same size as the container view
    playerLayer.frame = self.viewVidioPlayer.layer.bounds

    self.viewVidioPlayer.layer.addSublayer(playerLayer)

    self.observer = player!.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: DispatchQueue.main) { (CMTime) -> Void in
        if self.player!.currentItem?.status == .readyToPlay {

            if let currentItem = self.player!.currentItem {
                let duration = currentItem.asset.duration
                print("Total Duration - \(duration)")
            }


            let time : Float64 = CMTimeGetSeconds(self.player!.currentTime());
            //print("\(time)")
            print("Intro Video stress Overlay - \(time)")

            let playbackLikelyToKeepUp = self.player?.currentItem?.isPlaybackLikelyToKeepUp
            if playbackLikelyToKeepUp == false {
                //print("Here start the activity indicator inorder to show buffering")
            }else{
                //print("stop the activity indicator")
            }
        }
    }

在故事板中,我有我的视频视图,其中包含对superview的上、下、前导、尾随的约束,我播放视频。这里的问题很奇怪,当我选择故事板并选择iPhone7时,它对iPhone7很有效,但对iPhoneX不起作用;当我选择iPhoneX并在iPhoneX中运行时,它对iPhone7很有效,但对iPhone7不起作用。两边有黑色的空间。有人能解释一下问题是什么吗?任何帮助都是值得的。

这是由于iPhone X的
安全区域出现的问题。请尝试将您的约束设置为
超级视图
,而不是
安全区域

我在我的一个项目中注意到,如果您的视频的纵横比与iPhone X的纵横比不匹配,也可能会出现此问题。为了解决此问题,我设计了不同版本的视频,分别使用设备的纵横比。 我有一个用于iPad的版本,一个用于没有凹口的iPhone,还有一个用于有凹口的iPhone。同时尝试将videoGravity设置为
AVLayerVideoGravity.resizeAspect

即使将播放器视图设置为与superview的边界相匹配,
播放器
层的帧也将是视频的纵横比


您可以通过尝试将视频层缩放到帧大小来解决此问题。但这会导致您的视频在宽度或高度上拉伸,看起来会很奇怪。

我认为这是因为您正在根据屏幕大小调整视图。正确地给出约束条件,它在所有设备中都会同样工作。但我已经根据superview给出了约束条件。