gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:18:52 24 4
gpt4 key购买 nike

当我使用 Storyboard添加自定义 UIView 时,何时计算 UIView 的正确帧大小?我无法在 UIView 的 init(frame: CGRect)init(coder aDecoder: NSCoder)awakeFromNib 中获得正确的帧大小()。我在 override func layoutSubviews() 中获得了正确的大小,但是这次 View 没有添加到 View Controller 的 View 中。

编辑:
我想在 UIView 子类中执行此操作,因为我向自定义 UIView 添加了一个 CAGradientLayer 层(与我的 View 具有相同的大小)。肯定有比在 UIViewControllerviewDidLayoutSubviews 方法中设置 View 更好的方法。

有两个垂直约束( super View 的尾部和前导空间)调整我的自定义 View 的宽度。但是上述方法中的宽度是600,不是屏幕宽度。

最佳答案

func viewWillAppear(_ animated: Bool)

在 View 层次结构到位并设置几何图形后,将在 viewController 上调用它。

它通常是安排与几何相关的 viewController 代码的最佳位置,并且在过渡动画运行之前被调用。

随后调用 viewDidAppear,在过渡动画完成后调用。

更新

因为您想直接在自定义 View 中(而不是在 viewController 中)设置它,要覆盖的适当 UIView 函数是 layoutSubviews。请务必在覆盖中调用 super.layoutSubviews()

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

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

更新 2:collectionView 单元格 Collection View 单元格从 Collection View 的布局中获取它们的框架数据。当单元格需要知道它的几何形状时,您可以覆盖 applyLayoutAttributes

func applyLayoutAttributes(_ layoutAttributes: UICollectionViewLayoutAttributes!)

默认的 layoutAttributes 之一是 frame 属性。另请参阅下面关于如何直接从 collectionView.layout 中提取框架的评论。

关于swift - 在其子类中获取自定义 UIView 的框架大小的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758973/

24 4 0
文章推荐: ios - 在快速关闭中返回 Void 和 () 之间的区别
文章推荐: javascript - Angular : use a variable into
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com