目的:すべてのサイズのiPhoneで2つのセルを持つエッジツーエッジUICollectionView。UICollectionViewエッジからエッジへのレイアウト
iPhone 6上しかしfunc collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let screenSize = collectionView.bounds
let screenWidth = screenSize.width
print("Zhenya: \(screenWidth)") // prints correct 375, which is half of iPhone 6
let cellEdgeLength: CGFloat = screenWidth/2.0
return CGSize(width: cellEdgeLength, height: cellEdgeLength)
}
また
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
let flow = UICollectionViewFlowLayout()
flow.scrollDirection = UICollectionViewScrollDirection.vertical
flow.minimumInteritemSpacing = 0
flow.minimumLineSpacing = 0
collectionView.collectionViewLayout = flow
}
:
コレクションセルの属性:
コレクションビュー属性:
更新:グラデーションの FUNC、実際には右の幅を取得: (カスタムUICollectionViewCellクラスに位置)
func addGradient() {
let gradient = CAGradientLayer()
gradient.frame = gradientView.bounds
let topColor = UIColor(red:0.07, green:0.07, blue:0.07, alpha:1)
let botomColor = UIColor.clear
gradient.colors = [topColor.cgColor, botomColor.cgColor]
if gradientWasRemoved == false {
gradientView.layer.insertSublayer(gradient, at: 0)
} else if gradientWasRemoved == true {
self.addSubview(gradientView)
}
アップデート2: 注:iPhone 7 Plusでのテスト。 私はこのコードで (それのように思える)UICollectionViewFlowLayoutがsizeForItemAtIndexPath:
にcratedセルサイズをオーバーライドすることがわかった:
let flow = UICollectionViewFlowLayout()
let screenSize = collectionView.bounds
let screenWidth = screenSize.width
let cellEdgeLength: CGFloat = screenWidth/2.0
flow.itemSize = CGSize(width: cellEdgeLength, height: cellEdgeLength)
flow.scrollDirection = UICollectionViewScrollDirection.vertical
flow.minimumInteritemSpacing = 0
flow.minimumLineSpacing = 0
collectionView.collectionViewLayout = flow
私はこれがあります。
をそれから私は、マニュアル(セル端の長さを指定することを決めましたiPhone7Plustの幅の半分= 207):
let cellSide: CGFloat = 207
flow.itemSize = CGSize(width: cellSide, height: cellSide)
flow.scrollDirection = UICollectionViewScrollDirection.vertical
flow.minimumInteritemSpacing = 0
flow.minimumLineSpacing = 0
collectionView.collectionViewLayout = flow
これは:
あなたの試したCGSize(width :(self.collectionView!.frame.width/2)、height:(self.collectionView!.frame.width/2)) 'を返すのですか? frame =親ビューの座標系を使用するビューの位置とサイズ bounds =ビューの位置とサイズが独自の座標系を使用 – mat
動作しませんでした。 いくつかの手がかりを与えることができます - 私は自分のセルにグラデーションビューを持っており、それは正しい幅を取る。私は勾配のコードで自分の投稿を更新します。多分それが助けになるでしょう。 –
かもしれません。あなたはその勾配ビューに制約があるのがわかります – mat