Snapkit扩展 - 约束值可根据依赖视图显隐做调整

痛点:

多个视图从左到右布局(或者上到下),当中间某个视图因为业务需要隐藏时,
虽然设置了视图hidden为YES,但是视图自身的间距还在,其他视图依赖它的话,会额外多出一块多余的间距,此时需要花额外的精力去调整这个间距问题,很繁琐!

解决方案:

利用该Snapkit扩展布局,业务视图设置hidden即可,间距会自动调整

接口扩展

 make.left.equalTo(v.snp.right).offset(10).whenHidden(view, hiddenValue: 0, originalValue: 10)

view.snp_hidden(true)

效果展示

屏幕录制2023-06-27 12.52.41(1).gif

使用范例

//视图1
 let v = UIView()
 v.backgroundColor = .yellow
 view.addSubview(v)
 v.snp.makeConstraints { make in
     make.left.equalTo(10)
     make.top.equalTo(200)
     make.width.height.equalTo(100)
 }

 //视图2
 let v1 = UIView()
 v1.backgroundColor = .red
 view.addSubview(v1)
 v1.snp.makeConstraints { make in
     make.left.equalTo(v.snp.right).offset(10).whenHidden(v, hiddenValue: 0, originalValue: 10)
     make.top.equalTo(200)
     make.width.height.equalTo(100).whenHidden(v1, hiddenValue: 0, originalValue: 100)
 }

 let v2 = UIView()
 v2.backgroundColor = .blue
 view.addSubview(v2)
 v2.snp.makeConstraints { make in
     make.left.equalTo(v1.snp.right).offset(10).whenHidden(v1, hiddenValue: 0, originalValue: 10)
     make.top.equalTo(200)
     make.width.height.equalTo(100)
 }

 //业务显隐
 DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: DispatchWorkItem(block: {
     //隐藏
     UIView.animate(withDuration: 0.25) {
         v1.snp_hidden(true)
         self.view.layoutIfNeeded()
     }
     DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: DispatchWorkItem(block: {
         //显示
         UIView.animate(withDuration: 0.25) {
             v1.snp_hidden(false)
             self.view.layoutIfNeeded()
         }
     }))
 }))

源码位置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容