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;
}
'IT TIP' 카테고리의 다른 글
모든 환경 변수를 C / C ++로 인쇄 (0) | 2020.11.25 |
---|---|
3D 벡터의 회전? (0) | 2020.11.25 |
장치 너비와 높이를 얻는 방법은 무엇입니까? (0) | 2020.11.25 |
"어떤 저장소에서도 유효한 gem을 찾을 수 없습니다"(rubygame 및 기타) (0) | 2020.11.25 |
미디어 유형 = application / json에 대한 MessageBodyWriter를 찾을 수 없습니다. (0) | 2020.11.25 |