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

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即可

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值