美文网首页2021 swfit 重拾之路
Swift SnapKit获取真实frame

Swift SnapKit获取真实frame

作者: 大也 | 来源:发表于2021-07-06 08:58 被阅读0次

一.通过协议方法款速加载xib中的view
1.首先创建对应的xib和view文件
2.创建协议文件,NibLoad.swift

协议代码如下
/*
xib自定义的view遵循这个协议,可以实现快速加载
*/
protocol Nibloadable {

}
extension Nibloadable where Self : UIView{
  static func loadNib(_ nibNmae :String? = nil) -> Self{
      return Bundle.main.loadNibNamed(nibNmae ?? "\(self)", owner: nil, options: nil)?.first as! Self
  }
}

让TestView2遵循Nibloadable协议后就能直接使用了。这样避免了每次自定义view的时候都要自定义加载方法。

testView2 = TestView2.loadNib()
self.view.addSubview(testView2)
testView2.frame = CGRect.init(x: 130, y: 20, width: 100, height: 100)

二. 纯代码和Xib自定义view时如何获取view的真实frame
如果是纯代码添加约束的话,添加完后,执行setNeedsLayout和layoutIfNeeded,之后,就能获得子控件的真实frame了,

setNeedsLayout:标记一个view为需要更新约束。
layoutIfNeeded:如果有被标记的veiw,执行layoutSubviews,

init?(coder aDecoder: NSCoder):xib初始化控件时调用,在该方法中控件为nil,可以在这个方法里代码添加控件
awakeFromNib() :xib子控件初始化完成后调用,但是frame是xib中的frame,不是真实frame
layoutSubviews() :这个方法里获得的frame是真实的frame

从上面可以看出,如果是xib的话,从layoutSubviews可以获得子控件的真实frame,如果是纯代码的话,添加完约束后,调用setNeedsLayout和layoutIfNeeded后可以获得真实frame。

相关文章

网友评论

    本文标题:Swift SnapKit获取真实frame

    本文链接:https://www.haomeiwen.com/subject/bgubultx.html