2017-05-31 3 views
0

Ich habe eine einfache UICollectionViewCell, die volle Breite ist und ich verwende SnapKit, um seine Unteransichten zu gestalten. Ich verwende SnapKit für meine andere Ansicht und es funktioniert großartig, aber nicht in der SammlungViewCell. Dies ist das Layout ich zu erreichen bin versucht: collectionViewCell layoutUICollectionViewCell Layout mit SnapKit

Der Code für die collectionViewCell ist:

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") 
} 

ohne Einschränkungen der Anwendung der Imageview in der Zelle links oben angezeigt, aber die Anwendung keine Einschränkungen macht die Bild verschwindet. Wenn Sie die collectionViewCell in der Debug-Ansicht überprüfen, werden die Optionen imageView und constrains angezeigt, aber "Größe und horizontale Position sind für UIImageView nicht eindeutig".

Ich habe auch versucht, contentView.translatesAutoresizingMaskIntoConstraints = false unter anderem, aber die gleichen Ergebnisse zu setzen.

Ich benutze alle Code und keine Storyboard UI oder Layouts.

Danke für jede Hilfe!

Antwort

0

Ich weiß nicht viel über SnapKit, aber es sieht so aus, als ob Sie eine Einschränkung vermissen. Sie brauchen Höhe, Breite, x und y. Funktioniert gut mit IOS 9 Einschränkungen.

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 
    } 
0

Sie können nicht sowohl Auto-Layout (SnapKit) und manuelles Layout (Set-Rahmen) verwenden. Normalerweise führt die Verwendung des automatischen Layouts dazu, dass das manuelle Layout fehlschlägt. Der Code der Einschränkungen in snp closure ist jedoch nicht vollständig. Ob Auto-Layout oder manuelles Layout, schließlich sollte die Ansicht die Position und Größe erhalten.

So können Sie wie folgt versuchen:

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) 
} 
+0

Das funktionierte - thks. Für die x-Position musste ich den Code auf - make.centerX.equalTo (contentView.snp.centerX) aktualisieren. Für mein Layout wollte ich jedoch, dass das Bild die rechte Seite der Zelle umklammert, sodass ich stattdessen make.right.equalTo (contentView.snp.rightMargin) verwendete. – Dennish

Verwandte Themen