Używam Xcode 6 Beta 3, iOS 8 SDK. Kompiluj docelowy iOS 7.0 przy użyciu języka Swift. Zapoznaj się z moim problemem krok po kroku ze zrzutami ekranu poniżej.
Mam UICollectionView w Storyboard. 1 Prototyp UICollectionViewCell, który zawiera 1 etykietę pośrodku (bez reguły autorezyzacji). Fioletowe tło miało oznaczać contentView, który jest generowany w czasie wykonywania przez Cell. Ten widok zostanie w końcu odpowiednio zmieniony na podstawie mojego UICollectionViewLayoutDelegate, ale nie na iOS 7. Zwróć uwagę, że używam Xcode 6 i problem występuje tylko w iOS 7.
Kiedy tworzę aplikację na iOS 8. Wszystko jest w porządku.
Uwaga: Fioletowy to contentView , niebieski to mój UIButton z zaokrąglonym rogiem.
Jednak w systemie iOS 7 wszystkie widoki podrzędne w komórce nagle zmniejszają się do klatki (0,0,50,50) i nigdy nie są już zgodne z moją regułą autorezyzacji.
Zakładam, że to błąd w iOS 8 SDK lub Swift, a może Xcode?
Aktualizacja 1: Ten problem nadal występuje w oficjalnym Xcode 6.0.1! Najlepszym rozwiązaniem jest to, co sugeruje KoCMoHaBTa poniżej, ustawiając ramkę w cellForItem komórki (musisz jednak podklasować swoją komórkę). Okazało się, że jest to niekompatybilność pomiędzy iOS 8 SDK i iOS 7 (sprawdź odpowiedź ecotax poniżej cytowaną z Apple).
Aktualizacja 2: Wklej ten kod na początku swojego cellForItem i wszystko powinno być w porządku:
/** Xcode 6 on iOS 7 hot fix **/
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
/** End of Xcode 6 on iOS 7 hot fix **/
contentView
zmianę rozmiaru komórki, działa dobrze, aby obejść problem. Wydaje mi się, że w iOS 8 Apple zmieniło coś w sposobie obsługi widoków zawartości komórek podczas tworzenia w Interface Builder (który i tak jest trochę czarną skrzynką). Ale fakt, że zmienia zachowanie podczas kierowania na iOS 7, jest z pewnością błędem.
contentView
krawędzie do krawędzi komórki.