2017-11-21 6 views
0

많은 개체가 있지만 전체 이미지를 포함하는 사용자 지정 UICollectionViewCell을 가지고 있습니다. 데이터베이스에 연결하고 저장된 이미지 URL을 가져와 각 사진을 추가하여 UIImageView을 채워야합니다 (사진 수는 선택 사항입니다. 1에서 10까지)를 UIStackView으로 변경하십시오.UICollectionView의 동적 셀 높이

이제 셀의 높이가 하드 코딩 된 것을 제외하고는 모든 것을 얻었으므로 작동하지 않습니다. 나는 크기를 얻는 방법을 모르겠다. 여기 내 코드가있다.

높이가 하드 코드 된 곳입니다. UIImageView가 설치되는 위치를

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 
} 

입니다. 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로 곱하기 전에 이미지 높이를 합합니다.

또 다른 해결책은 각 이미지에 대한 셀을 만드는 것입니다. stackview 대신 섹션 및 사용자 정의 collectionview 레이아웃을 사용할 수 있습니다.

0

표시된 woosiki와 마찬가지로 반환 된 이미지 크기를 기반으로 값을 계산할 수 있습니다. 일단 응답을 받고 전체 높이를 계산 한 다음 collectionView.reloadData()를 호출하고 각 백업 객체에 대해 fullHeight 속성을 참조합니다. let/where와 default/max height가 더 안전 할지라도 아래처럼 보입니다. 테두리/간격에 대한

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