Ios UICollectionViewCell布局与SnapKit
我有一个简单的UICollectionViewCell,它是全宽的,我正在使用SnapKit来布局它的子视图。我将SnapKit用于我的另一个视图,它工作得很好,但不在collectionViewCell中。这是我试图实现的布局: collectionViewCell的代码为:Ios UICollectionViewCell布局与SnapKit,ios,swift3,uicollectionviewcell,snapkit,Ios,Swift3,Uicollectionviewcell,Snapkit,我有一个简单的UICollectionViewCell,它是全宽的,我正在使用SnapKit来布局它的子视图。我将SnapKit用于我的另一个视图,它工作得很好,但不在collectionViewCell中。这是我试图实现的布局: collectionViewCell的代码为: lazy var imageView: UIImageView = { let img = UIImageView(frame: .zero) img.contentMode = UIViewConte
lazy var imageView: UIImageView = {
let img = UIImageView(frame: .zero)
img.contentMode = UIViewContentMode.scaleAspectFit
img.backgroundColor = UIColor.lightGray
return img
}()
override init(frame: CGRect) {
super.init(frame: frame)
let imageWidth = CGFloat(frame.width * 0.80)
let imageHeight = CGFloat(imageWidth/1.77)
backgroundColor = UIColor.darkGray
imageView.frame.size.width = imageWidth
imageView.frame.size.height = imageHeight
contentView.addSubview(imageView)
imageView.snp.makeConstraints { (make) in
make.top.equalTo(20)
//make.right.equalTo(-20)
//make.right.equalTo(contentView).offset(-20)
//make.right.equalTo(contentView.snp.right).offset(-20)
//make.right.equalTo(contentView.snp.rightMargin).offset(-20)
//make.right.equalToSuperview().offset(-20)
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
在不应用任何约束的情况下,imageView显示在单元格的左上角,但应用任何约束会使图像消失。在调试视图中检查collectionViewCell会显示imageView和约束,但“UIImageView的大小和水平位置不明确”
我还尝试过设置contentView.translatesAutoResizezingMASKINTOCONSTRAINTS=false以及其他设置,但结果相同
我使用的是所有代码,没有故事板UI或布局
谢谢你的帮助 我对SnapKit了解不多,但看起来您缺少了一个约束。你需要高度,宽度,x和y。可以很好地处理ios9约束
let imageView: UIImageView = {
let view = UIImageView()
view.translatesAutoresizingMaskIntoConstraints = false
view.contentMode = .scaleAspectFit
view.backgroundColor = .lightGray
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
func setupViews() {
self.addSubview(imageView)
imageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 10).isActive = true
imageView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -10).isActive = true
imageView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 2/3, constant: -10).isActive = true
imageView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 1/2, constant: -10).isActive = true
}
不能同时使用自动布局(SnapKit)和手动布局(设置帧)。通常,使用自动布局会导致手动布局失败。然而,snp闭包中的约束代码并不完整。无论是使用自动布局还是手动布局,最后视图都应该获得位置和大小 因此,您可以这样尝试:
imageView.snp.makeConstraints { make in
// set size
make.size.equalTo(CGSize(width: imageWidth, height: imageHeight))
// set position
make.top.equalTo(20)
make.centerX.equalTo(contentView)
}
那起作用了-太棒了。对于x位置,我必须将代码更新为-make.centerX.equalTo(contentView.snp.centerX)。不过,在我的布局中,我希望图像紧靠单元格的右侧,所以我使用make.right.equalTo(contentView.snp.rightMargin)。