swift – 在其子类中获取自定义UIView的框架大小的位置

当我通过使用故事板添加我的自定义UIView时,UIView的正确框架大小是否在计算?
在UIView的init(框架:CGRect)或init(coder aDecoder:NSCoder)或awakeFromNib()中,我无法获得正确的帧大小.我在覆盖func layoutSubviews()中获得正确的大小,但这次视图没有添加到视图控制器的视图.

编辑:
我想在UIView子类中这样做,因为我添加一个CAGradientLayer层(与我的视图具有相同的大小)到我的自定义UIView.在UIViewControllers viewDidLayoutSubviews方法中设置视图必须有更好的方法.

有两个垂直约束(拖尾和前导空间到超级视图),调整我的自定义视图的宽度.但是在上述方法中宽度为600,而不是屏幕宽度.

func viewWillAppear(_ animated: Bool)

在视图层次结构就位并且几何体被设置之后,这在视图控制器上被调用.

通常是安排几何相关的viewController代码的最佳位置,并且在运行转换动画之前调用它.

之后是调用viewDidAppear,这在转换动画完成后被调用.

更新

因为你想直接在自定义视图中设置(而不是在viewController中),要覆盖的适当的UIView函数是layoutSubviews.请确保在覆盖中调用super.layoutSubviews().

override func layoutSubviews() {
    super.layoutSubviews()
    //self.frame will be correct here
}

这将在viewController的viewWillAppear和viewDidAppear之后调用

更新2:collectionView单元格
集合视图单元格从集合视图的布局获取其框架数据.当一个单元格需要知道它是几何时,你可以覆盖applyLayoutAttributes

func applyLayoutAttributes(_ layoutAttributes: UICollectionViewLayoutAttributes!)

其中一个认的layoutAttributes是frame属性.请参阅下面的我的评论如何直接从collectionView.layout提取框架.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...