IT TIP

iOS UICollectionView 프로토 타입 셀 크기 속성이 무시 됨

itqueen 2020. 11. 25. 21:47
반응형

iOS UICollectionView 프로토 타입 셀 크기 속성이 무시 됨


두 개의 프로토 타입 셀이있는 UICollectionView를 사용하고 있습니다. 프로토 타입 셀은 너비가 다르며 다른 컨트롤 (이미지보기 및 웹보기)을 포함합니다. 주어진 인덱스에 대해 올바른 프로토 타입 셀을 확실히 반환하고 있지만 (모든 셀에 올바른 내용이 표시됨) 프로토 타입 셀 크기는 무시되고 대신 컬렉션 뷰의 항목 크기가 사용됩니다. 크기를 수동으로 설정하는 것과는 다릅니다. 실제로 표시 될 때 속성이 무시되는 경우 스토리 보드에서 프로토 타입 셀의 크기를 조정할 수있는 이유는 무엇입니까?


스토리 보드 편집기의 셀 크기는 셀 디자인을 돕기위한 것입니다. 각 프로토 타입 셀은 크기가 다를 수 있으므로 UICollectionView는 모든 셀에 대해 선택할 셀의 크기를 알지 못합니다. 그렇기 때문에 셀에 사용할 실제 크기를 별도로 설정합니다. 디자이너에서 컬렉션보기를 선택하고 "컬렉션보기 크기"제목 아래의 크기 검사기에서 셀 크기 너비와 높이를 설정하여 수행 할 수 있습니다.

또는 다음 메서드를 재정의하고 각 셀에 사용할 크기를 지정하는 CGSize 개체를 반환 할 수 있습니다. 이 방법을 사용하면 실제로 각 셀의 크기를 다르게 설정할 수 있습니다.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

예:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(100, 100);
}

이 메서드를 호출하려면 뷰 컨트롤러가 UICollectionViewDelegateFlowLayout의 델리게이트 여야합니다. 따라서 다음과 같이 뷰 컨트롤러의 .h 파일에 위임 선언을 추가하는 것을 잊지 마십시오.

@interface MyViewController () <UICollectionViewDelegateFlowLayout>

빠른

extension MyViewController : UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: 100)
    }
}

모든 세포가 동일한 크기와 경우에 당신은 설정할 수 있습니다 itemSize온을UICollectionViewFlowLayout

예:

((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);

최신 iOS에서 작동하는 Swift.

(collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize

Sam에게 답장 할 포인트가 충분하지 않지만 핵심은 UICollectionViewLayout이 아니라 UICollectionViewFlowLayout이라는 것입니다.


속성 UICollectionViewCell에서의 크기를 설정할 수 있습니다 UICollectionView.

스토리 보드에서 선택 Collection View상기 Document Outline다음, 당신의 편집 Cell Size에를 Size Inspector.

그리고 사용자 지정 인 경우 셀의 크기 유형을 기본값으로 변경해야합니다.


Swift에서는 sizeForItemAtIndexPath 델리게이트 메서드를 호출하여 각 셀의 크기를 설정할 수 있습니다.

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

        if indexPath.row == 0 {
                // Set the size for cell no. 0
         }else if indexPath.row == 1 {
               // Set the size for cell no. 1
        }
    }

도움이 되었기를 바랍니다. 감사!


모든 셀의 크기가 같으면 UICollectionView의 셀 크기 속성을의 크기 속성과 동일 하게 설정해야 UICollectionViewCell합니다.


기본 대리자를 사용합니다. . .

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize mElementSize;
    mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60);
    return mElementSize;
}   

참고 URL : https://stackoverflow.com/questions/14492186/ios-uicollectionview-prototype-cell-size-property-ignored

반응형