2

セルの幅を編集しようとしているため、画面のサイズに関係なく、score1.countのセルが連続して表示されます。コレクションビューに使用するコードは次のとおりです。CollectionViewCellの幅を編集する

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 1 
} 
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return self.items.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell 

    cell.myLabel.text = String(self.items[indexPath.item]) 

    return cell 
} 

これは、セルの幅を対象とする関数です。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let size = Int(self.view.frame.size.width)/(score1.count + 1) 
    return CGSize(width: CGFloat(size), height: 80) 
} 

私は、さまざまなソースを見てさまざまなことを試していますが、コレクションビューには正しい数のセルがありません。 1つのアイデアは、自動レイアウトでセルサイズを設定しているためですが、変更するたびにxcodeがクラッシュする可能性があります。自動レイアウトをバイパスする方法はありますか?または、自動レイアウトを変更する方法は?

ありがとうございます!

+0

を試してみてください? –

+0

いいえ、私はコード内でそれを参照していません。 –

+1

はUICollectionViewDelegateをUICollectionViewDelegateFlowLayoutに変更しました。みんなありがとう! –

答えて

0

は、あなたが `UICollectionViewFlowLayout`を設定している。この

extension YourViewController : UICollectionViewDelegateFlowLayout{ 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let rowItems:CGFloat = 4 
    let padding:CGFloat = 2 
    let width = (collectionView.bounds.width/rowItems) - padding //Change width as per your requirement 
    let height = collectionView.bounds.height - (2 * padding)//Change height as per your requirement 
    return CGSize(width: width, height: height) 
    } 

} 
+0

これらの回答は機能しますが、まだストーリーボードのレイアウトオプションで指定した内容に準拠しています。どのように私はそれを無効にするのですか?それを空白のままにしますか?または、私は他のどこかで行方不明のコード行がありますか? –

0

sizeForItemAtIndexPathを次のように変更することができます。マージンを差し引いた後にセルのサイズを割り当て、セルの数でダイビングすることができます。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize { 
     let size = (Int(collectionView.bounds.width) - (score1.count+1)*5) /(score1.count) // 5 is the margin you want to keep in between 2 cells 
     return CGSize(width: CGFloat(size), height: 80) 
    } 

質問がある場合はお知らせください。私は努力して明らかにするでしょう。

+0

5のあとに括弧が多すぎます。よりうまく動作しますが、score1.countよりも1つ多いです。 –

+0

イエプ・ミス。実際に私のシステムから離れていて、それはモバイルからアクセスしています。 「それはうまくいくが、まだscore1.countより1つ多い」どういう意味ですか。 – luckyShubhra

+0

あなたが11セルを連続して持っていた前に、 – luckyShubhra

関連する問題