セルの幅(UICollectionViewCell)をUICollectionViewの幅と等しくなるように設定し、そのセル内に含まれているUILabelでまったく同じことを実行しようとしています。以下のコードは、私が達成しようとしていることを正確に説明していると思います。だから私はここSOといくつかのチュートリアルでいくつかの質問を読みましたが、どうすればこれを達成できるかまだわかりません。
いくつかの質問でcollectionViewLayout
の使用について言っていましたが、コード内での使用方法に本当に苦労しています。何か案は?ありがとうございました!
_func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath) as LocationViewCell
cell.locationLabel.text = "Hello there!"
// Set cell & label width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
cell.frame.size.width = collectionViewWidth // Works
cell.locationLabel.frame.size.width = collectionViewWidth // Does NOT
_
だから私は以下を追加しました:
_func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
// Set cell width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
return CGSize(width: collectionViewWidth, height: 35)
}
_
ビューがロードされたとき、UILabelの幅はまだ小さいということが起こります。別のビューに移動してから戻ると、100%です。だから私はviewDidLoad()
で何かをしなければなりませんよね?私はすでにself.collectionView.reloadData()
を使用していますが、これはデータ専用だと思います。
_func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("locationCell", forIndexPath: indexPath) as LocationViewCell
cell.locationLabel.text = "Hello UILabel"
// Set cell width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
cell.frame.size.width = collectionViewWidth
cell.locationLabel.frame.size.width = collectionViewWidth
return cell
}
_
このメソッドが呼び出されるまでに、コレクションビューは、フローデリゲートメソッドからセルを取得しているため、セルの大きさをすでに認識しているため、機能しません。
optional func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
ここで、セルのサイズを設定する必要があります。