Swift 在Xcode 10/iOS 12中不遵守定位约束
这一切昨天都在Xcode 9和iOS 11下工作;但是,在更新到Xcode 10和iOS 12之后,视图将不再显示。我在一个视图中显示了一个视频。今天我能听到但看不到视频。我检查了这个框架,发现它是零,这就解释了这个问题。但是,与以前的版本相比没有任何变化。我已经删除了视频内容,只是在应用了锚定约束后查看了视图的帧,它们都是零Swift 在Xcode 10/iOS 12中不遵守定位约束,swift,autolayout,Swift,Autolayout,这一切昨天都在Xcode 9和iOS 11下工作;但是,在更新到Xcode 10和iOS 12之后,视图将不再显示。我在一个视图中显示了一个视频。今天我能听到但看不到视频。我检查了这个框架,发现它是零,这就解释了这个问题。但是,与以前的版本相比没有任何变化。我已经删除了视频内容,只是在应用了锚定约束后查看了视图的帧,它们都是零 import UIKit import AVKit class VideoView: UIView { private var videoURL:URL! priva
import UIKit
import AVKit
class VideoView: UIView {
private var videoURL:URL!
private var parentView:UIView!
private var avPlayer:AVPlayer!
private var avPlayerLayer:AVPlayerLayer!
init(url:URL, parentView:UIView) {
super.init(frame: .zero)
self.videoURL = url
self.parentView = parentView
setup()
}
private func setup() {
self.translatesAutoresizingMaskIntoConstraints = false
self.parentView.addSubview(self)
self.topAnchor.constraint(equalTo: self.parentView.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
self.leadingAnchor.constraint(equalTo: self.parentView.leadingAnchor, constant: 8).isActive = true
self.trailingAnchor.constraint(equalTo: self.parentView.trailingAnchor, constant: -8).isActive = true
self.heightAnchor.constraint(equalToConstant: 200).isActive = true
print(self.parentView.frame)
print(self.frame)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
请注意setup()
末尾的两条打印语句。parentView
返回0,0414736
。self
视图返回0,0,0
如果在Init
中,我设置了帧大小,它将尊重它;但是,它不应用锚定约束,因此视图的大小将保持在我放入init的任何位置
似乎根本没有考虑锚约束。调试器中没有关于它们的错误,正如我们所看到的,translatesAutoresizingMaskIntoConstraints
设置为false
,并且所有约束都将isActive
设置为true
只有Xcode和iOS版本已更改。我错过了什么
更新1:
如果我创建一个标签并将其添加到self
,则标签显示良好。如果我为self
创建一个背景色,该背景色也会显示精细,包括使用锚定约束设置的适当高度。但是,帧仍保持为零。因此,当试图通过将帧设置为self
的边界来添加AVPlayerLayer
时,它不起作用,因为self
当然保持为零。因此,问题仍然是为什么框架的尺寸在初始化后没有改变
更新2:
在应用锚约束之后,我添加了一个
self.layoutifneed()
,这似乎解决了问题。虽然查看self
的框架,我得到-199,-100398200
不能说我理解X和Y的值。尽管如此,所需的布局似乎已经解决了这个问题,尽管Xcode 10/iOS 12中为什么需要这样做也是个谜 我在第二次更新中发布了答案,但为了清晰起见:
在应用锚约束之后,我添加了一个self.layoutifneed()
,这似乎解决了问题。虽然查看self的框架,我得到了-199,-100398200
不能说我理解了X和Y的值。尽管如此,所需的布局似乎已经解决了这个问题,尽管为什么在Xcode 10/iOS 12中需要这样做也是一个谜