선택한 정답 (태그를 사용하는 것만)이 나를 위해 작동하지 않았거나 (다른 답변도 없음) Changing label position in UICollectionViewCell이지만 내 문제는이 문제와 매우 유사합니다.cellForItemAtIndexPath의 UICollectionViewCell에서 UIView 프레임 변경
사용자 지정 UICollectionViewCell이있는 UICollectionView가 있습니다. 셀에는 IBOutlet 속성을 통해 참조되는 UIView가 있습니다. 단순히 cellForItemAtIndexPath
메서드 내에서 프레임을 변경하려고하고 UIView 의 프레임이 실제로 변경된 경우 인 반면, 실제로 무시되거나 무시되지 않습니다.
그러나 UICollectionView가 약간 스크롤되고 셀 재사용이 시작되면 다시 사용 된 셀 은이 UIView 프레임의 이전 변경 사항을 준수하므로 UIView가 정상적으로 표시됩니다. 따라서 어떤 이유로 특정 셀에 대해 처음으로 cellForItemAtIndexPath
이 호출되면 프레임 변경은 무시되지만 셀이 다시 사용되면 나중에 적용됩니다.
는 사실, 난 그냥 눈치 호기심 무언가가 다시 셀이 크기 이전에 변경했던 프레임의을 가지고,하지만 될 일이 원래 기원, 유지 (0, 0), 비록 그것을 (0, 50)과 같은 것으로 업데이트하려고 시도하고 있습니다.
UIView의 다른 속성을 변경하면 배경색을 변경하는 것과 같이 문제가 없습니다. UIView의 프레임이 처음 변경되는 것을 막기 위해 어떤 일이 벌어 질 수 있습니까?
프레임을 어떻게 변경하고 있습니까? 자동 레이아웃을 사용하고 있습니까? – rdelmar
의견을 보내 주셔서 감사합니다 (아래 및 아래). 나는'setFrame'을 사용하여 프레임을 변경하려고하는데 자동 레이아웃을 사용하고 있습니다. 아래에서 자동 레이아웃을 사용할 때 프레임이 아닌 제약 조건을 직접 업데이트하는 것이 더 낫다고 언급 했습니까? 'cellForItemAtIndexPath'에서 만들어진 프레임 변경이 후속 자동 레이아웃 액션에 의해 오버라이드되고 있다고 생각하십니까 (그렇다면 셀 재사용에 대해 어떤 이유로 든 괜찮습니까)? – narbodon
잘 모르겠습니다 만 자동 레이아웃을 사용하는 경우 프레임을 설정해서는 안됩니다. 이 기능을 끄면 문제가 해결되는지 확인할 수 있지만 자동 레이아웃을 고수하고 코드를 변경하여 이러한 제약 조건을 조정합니다. – rdelmar