UICollectionView 레이아웃 문제
UICollectionView
흐름 레이아웃 을 사용하고 있습니다. 나는 같은 것을위한 관습 UICollectionViewCell
을 만들었다 . 그러나 프로젝트를 실행하면 콘솔이 계속해서이 오류를 던집니다.
The behavior of the UICollectionViewFlowLayout is not defined because:
the item height must be less that the height of the UICollectionView minus the section insets top and bottom values.
셀의 크기가 정확한지 확인했습니다.
누구든지이 문제를 해결할 수 있었습니까?
를 사용하여 storyboards
으로 이동 storyboard
하여 전체 View Controller
(보기가 파란색으로 강조 표시되어야 함)를 클릭하고 Attributes Inspector
(화면 오른쪽의 네 번째 탭 )으로 이동 하여 "Under Top Bars"를 선택 취소해야한다는 것을 발견했습니다. , "Under Bottom Bars"및 "Under Opaque Bars". 이것은 나를 위해 문제를 해결했고 동료들에게도 해결되었습니다.
컬렉션보기를 사용하여 전체 화면보기 컨트롤러를 표시 할 때 몇 가지 문제가 발생했습니다.
기본적으로 런타임에 항목의 크기를 요청하고 단순히 컬렉션보기의 크기를 반환합니다.
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return self.collectionView.frame.size;
}
나는 이것이 매우 늦은 대답이라는 것을 알고 있지만 나도 이것을 경험했습니다.
내보기 컨트롤러 내부의 그것을 부르 자 MyViewController 나는이 UICollectionView
정의 사용되는 UICollectionViewCell
의. .NET Framework 의 높이에 따라 항목 크기를 반환하는 collectionView : layout : sizeForItemAtIndexPath 메서드를 구현 하고 UICollectionView
있습니다.
MyViewController 는 자동 레이아웃을 사용하여 스토리 보드에서 UIViewController
.
세로 모드에서는 셀이 잘 보이지만 가로 모드에서는 그렇지 않습니다.
나는 무효화가 내 문제를 해결 UICollectionViewLayout
내의 UICollectionView
내부의 viewWillLayoutSubviews
방법을.
- (void)viewWillLayoutSubviews {
[self.myCollectionView.collectionViewLayout invalidateLayout];
}
이전에는 내부 레이아웃을 무효화하려고했지만 willAnimateRotationToInterfaceOrientation:duration
작동하지 않았습니다. 그 이유는 아마도 모든 뷰의 크기가 아직 계산되지 않았기 때문에 자동 레이아웃이 마법을 마칠 때까지 기다려야합니다. 이 SO 스레드를 참조하십시오 .
Swift 4.0 업데이트 :
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.myCollectionView.collectionViewLayout.invalidateLayout()
}
전체 화면 셀로 컬렉션 뷰를 만들려고 할 때이 문제가 몇 번 발생했습니다. 내 문제는 IB / Storyboard에서 4 "화면을 레이아웃하고 항목 크기로 320 * 568을 지정했지만 높이가 480 인 3.5"화면을 사용하여 시뮬레이터에서 실행하여 발생했습니다. 해결책은 항목 크기를 지정하는 것입니다. 다음과 같은 코드 :
UICollectionViewFlowLayout *layout = (id) self.collectionView.collectionViewLayout;
layout.itemSize = self.collectionView.frame.size;
이렇게하면 셀 크기가 런타임에 올바르게 설정됩니다.
스토리 보드와 자동 레이아웃을 사용하는 경우 이런 종류의 문제를 디버깅하는 것은 정말 어렵습니다.
iPhone에서 UICollectionViewCell 전체 화면을 표시하려고 할 때 비슷한 문제가 발생했습니다.
대부분의 시간 문제는
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)
또는 flowLayout.itemSize에서 직접.
하지만 ...
- ViewController를 선택하십시오.
- 그런 다음 가장자리 확장 옵션을 선택 취소합니다.
이제 자동 레이아웃 제약을 설정해보십시오.
행운을 빕니다.
내 문제가 해결되었습니다.
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(self.collectionView.frame.size.width, self.collectionView.frame.size.height - 70);
}
U는이 화면의 상단과 하단에서 패딩 값을 볼 수 있습니다.
UICollectionView 및 UICollectionviewcell에 대해 올바른 자동 크기 조정 마스크를 설정해야합니다. 이것은 iPhone 4 Simulator의 문제를 해결했습니다.
For me I am using AKPickerView inside of a custom UIView which was giving me a slew of warnings like the ones mentioned here. All I did to eliminate the warnings was to Un-Check the box called 'AutoResize Subviews' in the Attributes Inspector for my custom UIView. That silenced the warnings so hard, I thought my logger stopped working.
What caused this for me was that I was trying to set my cells to the size of the superview rather than the size of the UICollectionView
. Simply replaced the superview frame with the UICollectionView
frame.
I just ran into the same error message, but for me the issue was that when I received new data from the api and tried to refresh my collectionView, the method that called [collectionView reloadData]
wasn't calling it on the main thread.
Hope this helps someone...
I have same issue
the behavior of the UICollectionViewFlowLayout is not defined because: the item height must be less than the height of the UICollectionView minus the section insets top and bottom values.
I solved this issue by checking the values in section Insets.And for fix cell size I have used below code.
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
CGSize result = [[UIScreen mainScreen] bounds].size;
CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale);
CGFloat cellWidth = [[UIScreen mainScreen] bounds].size.width - 20;
CGFloat cellHeight = [[UIScreen mainScreen] bounds].size.height - 120;
return CGSizeMake(cellWidth, cellHeight);
}
If you're loading a collectionView via a container view + UICollectionViewController, you may have set a height constraint on the container view which is constraining the height of the collection view itself. In my case, I found the collectionView.contentSize was taller than the constraint I had set on my container view.
Obviously this is a bit of an edge case but just in case you have a similar setup, I figured I'd add this comment.
None of the above fixes did it for me. I fixed it with this
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{CGFloat currentWidth = collectionView.frame.size.width;
UIEdgeInsets sectionInset = [(UICollectionViewFlowLayout *)collectionView.collectionViewLayout sectionInset]; //here the sectionInsets are always = 0 because of a timing issue so you need to force set width of an item a few pixels less than the width of the collectionView.
CGFloat width = currentWidth - 10;
}
참고 URL : https://stackoverflow.com/questions/16013209/uicollectionview-layout-issue
'Programing' 카테고리의 다른 글
자식 흐름 분기가 갈라졌습니다. (0) | 2020.12.04 |
---|---|
여러 모듈에서 winston 사용 (0) | 2020.12.04 |
div를 숨기고 빈 공간은 유지 (0) | 2020.12.04 |
C #에서 폐기 된 폐쇄에 대한 액세스? (0) | 2020.12.04 |
data.frame Group By 열 (0) | 2020.12.04 |