【问题标题】:Xib frame size isn't correct when adding it as a subview将 Xib 帧大小添加为子视图时不正确
【发布时间】:2019-12-21 21:07:32
【问题描述】:

我有一个如下所示的 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 中的硬编码值,上面的截图)。

我做错了什么,我需要改变什么才能让它工作?

【问题讨论】:

    标签: ios swift xcode swift4 swift5


    【解决方案1】:
    let view = Bundle.main.loadNibNamed("VideoContainerView", owner: self, options: nil)?.first as! UIView
    addSubview(view)
    rootView.frame = self.bounds
    rootView.autoresizingMask = [.flexibleWidth,.flexibleHeight] 
    

    【讨论】:

      【解决方案2】:

      您一开始就没有调整视频容器视图的大小:

          Bundle.main.loadNibNamed("VideoContainerView", owner: self, options: nil)
          rootView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
          addSubview(rootView)
      

      您需要添加某种初始尺寸,例如

          rootView.frame = self.view.bounds // or whatever
      

      否则,您的自动调整大小掩码会从 xib 文件的大小开始,这几乎肯定会出错。

      (顺便说一句,你的问题是“它似乎不尊重我的自动布局值”,但在你的代码中,你根本没有自动布局值!如果这是你想要的,你应该有使用自动布局。autoresizingMask 是自动布局的相反。)

      【讨论】:

        【解决方案3】:

        您可以像这样为 rootView 设置 x、y、hight 和 width 参数:

        rootView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
        

        【讨论】:

          猜你喜欢
          • 2016-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-20
          • 2016-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多