我有一个类似这样的xib:
这是我的视频容器视图课程:
class VideoContainerView: UIView {
@IBOutlet var rootView: UIView!
@IBOutlet weak var videoView: VideoView!
@IBOutlet weak var playIconContainer: UIView!
@IBOutlet weak var timeContainer: UIView!
@IBOutlet weak var timeLabel: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
func initialize() {
Bundle.main.loadNibNamed("VideoContainerView", owner: self, options: nil)
rootView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(rootView)
}
}
这是我PostMediaCollectionViewCell
的课程:
class PostMediaCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var container: UIView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var moreView: UIView!
@IBOutlet weak var moreViewLabel: UILabel!
@IBOutlet weak var videoContainerView: VideoContainerView!
override func awakeFromNib() {
super.awakeFromNib()
}
func initialize() {
}
}
但是当我在模拟器中运行应用程序时,VideoContainerView
的宽度/高度是错误的。它似乎并没有尊重我的自动布局值,因为在打印出其边界之后,其宽度和高度分别为661.0和372.0(XIB中的硬编码值,如上图所示)。
我在做错什么,我需要进行哪些更改才能使其正常工作?
答案 0 :(得分:0)
首先您无法调整视频容器视图的大小:
Bundle.main.loadNibNamed("VideoContainerView", owner: self, options: nil)
rootView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(rootView)
您需要添加某种初始尺寸,例如
rootView.frame = self.view.bounds // or whatever
否则,您的自动调整大小蒙版将以xib文件中的大小开头,这几乎肯定是错误的。
(顺便说一句,您的问题是说“它似乎并不尊重我的自动布局值”,但是在您的代码中,您根本没有自动布局值!如果这是您想要的,则应该具有使用自动版式。autoresizingMask
是自动版式的相反。)
答案 1 :(得分:0)
您可以像这样为rootView设置x,y,hight和width参数:
rootView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
答案 2 :(得分:0)
let view = Bundle.main.loadNibNamed("VideoContainerView", owner: self, options: nil)?.first as! UIView
addSubview(view)
rootView.frame = self.bounds
rootView.autoresizingMask = [.flexibleWidth,.flexibleHeight]