如何获取已通过snapkit设置的UIView的框架

时间:2019-04-03 10:15:46

标签: ios swift snapkit

首先,我真的要感谢构建了snapkit的家伙。它确实使设置UIViews约束变得非常容易。

但是现在,我有一个简单的问题:如何访问使用此库设置的视图的frame属性?

例如:

self.view.addSubview(contributePosterView)
self.contributePosterView.snp.makeConstraints { (make) in
    make.left.equalTo(self.view.snp.left)
    make.width.equalTo(self.view.bounds.width)
    make.top.equalTo(self.table.snp.bottom)
    make.bottom.equalTo(self.view.snp.bottom)
}

如何访问名为contributePosterView的视图的frame属性?

这对我很重要,特别是当我必须使用上述滚动视图的layoutSubviews属性在UIScrollview中进行设置时。

我尽我所能检查了snapkit文档,但仍未找到答案。

我应该怎么做?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

“ SnapKit”提供了添加约束的方法,该方法使用的语法比许多人常用的NSLayoutContraint方法容易得多。但是,它对视图没有任何作用,因此无法获得最终的帧大小。

问题在于您可能会在viewDidLoad()中进行“快照”调用,然后立即尝试获取该帧。到那时,所有发生的事情就是已经添加了约束,但是自动布局尚未完成其工作。

您要覆盖viewDidLayoutSubviews(),此时可以获取有效的帧大小:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    // now you can get the resulting frame
    let f = self.contributePosterView.frame

   // do what you want with the frame
}