我在新版本项目开发中遇到了一个地方需要修改之前用snapKit布局的view的约束,因为项目需求所以初始化的约束无法用frame替代,上网搜了好久才找到解决办法,控件初始化照样用约束布局
///楼盘信息
buildingInfoBaseView = NewHouseDetailBuildingInfoView(self)
baseScorllview.addSubview(buildingInfoBaseView)
buildingInfoBaseView.snp.makeConstraints { (make) in
make.top.equalTo(doorModelBaseView.snp.bottom).offset(15)
make.left.equalTo(baseScorllview)
make.size.equalTo(CGSize.init(width: Tools.WIDTH, height: 360))
}
var buildingBool = false
然后在某个点击事件里面这样写
if buildingBool == true {
UIView.animate(withDuration: 0.25, animations: {//UIView简单动画的方法,写上0.25秒动画时间
self.buildingInfoBaseView.snp.remakeConstraints({ (make) in
make.top.equalTo(self.doorModelBaseView.snp.bottom).offset(15)
make.left.equalTo(self.baseScorllview)
make.size.equalTo(CGSize.init(width: Tools.WIDTH, height: 360))
})
self.view.layoutIfNeeded()//告诉当前控制器的View要更新约束了,动态更新约束,没有这句的话更新约束就没有动画效果
}) { (true) in
self.buildingBool = false
}
}else{
UIView.animate(withDuration: 0.25, animations: {
self.buildingInfoBaseView.snp.remakeConstraints { (make) in
make.top.equalTo(self.doorModelBaseView.snp.bottom).offset(15)
make.left.equalTo(self.baseScorllview)
make.size.equalTo(CGSize.init(width: Tools.WIDTH, height: 400))
}
self.view.layoutIfNeeded()//动态更新约束,
}) { (true) in
self.buildingBool = true
}
}
}
这样子就能动画更新约束了
希望对各位小伙伴有所帮助