2017-11-21 47 views
0

多くのオブジェクトを含むカスタムのUICollectionViewCellがありますが、全体的にデータベースに接続し、保存された画像のURLを取得し、各写真を追加することによってUIImageViewを入力する必要があります(写真の数は任意です - 1から10まで)をUIStackViewに設定します。UICollectionViewの動的セルの高さ

ここでは、セルの高さがハードコードされていることを除いてすべてが得られます。したがって、機能しません。私はどのようにサイズを取得するか分からない。ここに私のコードです。

これは、高さがハードコードされている場所です。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
{ 
    let width = collectionView.bounds.width 
    let size = CGSize(width: width, height: 800) 
    return size 
} 

これはUIImageViewが設定されている場所です。 photoURLsは、データベースからダウンロードしたURLの配列です。

if let photoURLString = post?.photoURLs 
{ 
    for urlString in photoURLString 
    { 
     let photoURL = URL(string: urlString) 
     let imageView = UIImageView() 
     imageView.sd_setImage(with: photoURL) 
     imageView.contentMode = .scaleAspectFill 
     imageView.clipsToBounds = true 
     imageView.widthAnchor.constraint(equalTo: postImagesStackView.widthAnchor) 
     postImagesStackView.addArrangedSubview(imageView) 
     postImagesStackView.layoutIfNeeded() 
    } 
} 

また、各写真の間に少しのスペースを残す方法はありますか? 1ポイントと同じですか?

+0

あなたのプログラムの出力は何を? – 3stud1ant3

+0

質問が正しく理解されているかどうかわかりません。セルの出力を求めている場合は、同じセルに最大10枚の画像を入れることができます。私はそれを行う最善の方法は 'UIStackView'を使用し、単に' addArrangedSubview(uiview) 'メソッドを使って各画像を追加することだと言われました。現在、高さは固定されており、固定された高さしか表示されません。私は何とかすべての画像の高さを計算し、セルの高さを設定し、同じセルを再利用する必要があります。 – Dani

答えて

0

セルの高さを計算する必要があると思います。 この場合、collectionViewの再ロードを呼び出す前に画像の高さを合計するか、imageViewの高さを固定し、画像の数にheightを掛けます。

もう1つの解決策は、各画像のセルを作ることです。 stackviewの代わりに、セクションとカスタムcollectionviewレイアウトを使用できます。

0

woosikiと同様に、返される画像サイズに基づいて値を計算することもできます。レスポンスを取得して高さを計算したら、collectionView.reloadData()を呼び出し、各バッキングオブジェクトのfullHeightプロパティを参照します。次のようなものですが、let/whereとdefault/maxの高さで安全になります。ボーダー/間隔については

func collectionView(_ collectionView: UICollectionView, layout 
collectionViewLayout: UICollectionViewLayout, sizeForItemAt 
indexPath: IndexPath) -> CGSize 
{ 
    let imageObject = dataSource.items[indexPath.row] 
    let width = collectionView.bounds.width 
    let size = CGSize(width: width, height: imageObject.fullHeight) 
    return size 
} 

は、あなたがキャプションやメタデータを含む終わる場合はとにかく少し大きめの親ビューを含めるか、単に文書の例を試みることができる:

https://developer.apple.com/documentation/uikit/nslayoutanchor

関連する問題