Swift使用SnapKit给控件添加约束时出现的三个错误

来源:互联网 发布:电气控制图绘制软件 编辑:程序博客网 时间:2024/04/30 10:10

bug1:频繁显示约束冲突

1> 源代码

footerView.snp_makeConstraints { (make) -> Void in            // 防止cell重用            self.bottomConstraint = make.top.equalTo(retweetView.snp_bottom).constraint            make.left.equalTo(contentView.snp_left)            make.right.equalTo(contentView.snp_right)            make.width.equalTo(44)}

2> 在滚动屏幕时频繁报的错误
这里写图片描述
3> 原因
约束最后一行应该是高度等于44,而不是宽度等于44,宽度根据左右两边的约束已经可以确定了.所以再次设置宽度就约束冲突了.
4> bug解决
将width改为height后就可以了

bug2:显示的内容重叠到一起

1> 错误的源代码
没有错误提示:

 if originalModel?.model?.pic_urls?.count > 0{                // 显示pictureView                pictureView.hidden = false                self.snp_updateConstraints(closure: { (make) -> Void in                    self.bottomConstranit = make.bottom.equalTo(pictureView.snp_bottom).constraint                })                // 把配图视图的数据传递过来                pictureView.pic_urls = originalModel?.model?.pic_urls            }else{                // 不显示pictureView                pictureView.hidden = true                self.snp_updateConstraints(closure: { (make) -> Void in                    self.bottomConstranit = make.bottom.equalTo(self.snp_bottom).constraint                })            }

2> 错误截图
这里写图片描述

3> 原因
很明显底部约束设置错误;
有图片时显示正常,没图片时转发微博的内容全都跑到cell顶部了.说明没图片时底部约束设置错了.
4> 解决
将下述代码中的self改为contentLabel后即可解决

 self.bottomConstranit = make.bottom.equalTo(self.snp_bottom).constraint
self.bottomConstranit = make.bottom.equalTo(contentLabel.snp_bottom).constraint

bug3: 图片有的显示,有的不显示,且collectionView中第一行的图片都不显示

1> 错误的源代码

iconView.snp_makeConstraints { (make) -> Void in            make.left.equalTo(contentView.snp_left)            make.top.equalTo(contentView.snp_right)            make.width.equalTo(contentView.snp_width)            make.height.equalTo(contentView.snp_height)        }

2> 错误截图:
这里写图片描述

3> 错误原因
依然是图片框的约束设置错误;很明显源代码中第二行设置顶部约束时错设置成等于右侧了.

4> bug解决
将第二行代码最后的right改为top即可

综上:三次错误均为纯代码给控件添加约束时不细心导致的.约束错一点,显示出来的结果都偏差很远,所以以后给控件添加约束时一定要小心了.

1 0
原创粉丝点击