Używam UICollectionView z dwoma prototypowymi komórkami. Prototypowe komórki mają różne szerokości i zawierają różne elementy sterujące (widok obrazu i widok WWW). Z całą pewnością zwracam poprawną komórkę prototypową dla danego indeksu (wszystkie komórki wyświetlają poprawną treść), ale prototypowy rozmiar komórki jest ignorowany, a zamiast tego używany jest rozmiar elementu kolekcji. To nie tak, że ręcznie ustawiam rozmiar. Jaki jest cel pozwalający na rozmiar prototypowej komórki w storyboardie, jeśli właściwość jest po prostu ignorowana, gdy jest wyświetlana?iOS UICollectionView prototypowa właściwość rozmiaru komórki zignorowana
Odpowiedz
Rozmiar komórki w edytorze scenorysów służy tylko zaprojektowaniu komórki. Ponieważ każda prototypowa komórka może mieć inny rozmiar, UICollectionView nie wie, którą wielkość komórki wybrać dla wszystkich komórek. Dlatego ustawiasz rzeczywisty rozmiar, który chcesz użyć dla komórek osobno. Możesz to zrobić w projektancie, wybierając widok kolekcji i ustawiając kontrolkę Wielkość i wysokość rozmiaru komórki w rozmiarze "Rozmiar w perspektywie zbierania".
Można również zastąpić następującą metodę i zwrócić obiekt CGSize, który określa rozmiar, który ma być używany dla każdej komórki. Stosując tę metodę, można rzeczywiście mieć każda komórka być inny rozmiar:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
Przykład:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(100, 100);
}
Twój kontroler widok musi być delegatem UICollectionViewDelegateFlowLayout celem dla tej metody można nazwać. Więc nie zapomnij dodać, że oświadczenie delegata do pliku .h Pana zdaniem regulatora, takich jak:
@interface MyViewController() <UICollectionViewDelegateFlowLayout>
Jeśli wszystkie komórki są tego samego rozmiaru, należy po prostu ustawić właściwości wielkości komórce UICollectionView
do danego tak samo jak właściwości rozmiaru UICollectionViewCell
.
Jeśli wszystkie komórki są tej samej wielkości i można ustawić itemSize
na UICollectionViewFlowLayout
Przykład:
((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);
Wydaje się, że kolekcjaViewLayout.itemSize nie jest dostępna w systemie IOS6 – Sam
Można ustawić wielkość UICollectionViewCell
w UICollectionView
właściwości.
W Storyboard, Wybierz Collection View
na Document Outline
, a następnie zmodyfikuj swój Cell Size
w Size Inspector
.
Należy zmienić typ rozmiaru komórki na Domyślny, jeśli jest niestandardowy.
Swift, działa na najnowsze iOS.
(collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize
nie mam wystarczająco dużo punktów, aby odpowiedzieć na Sam, ale kluczem jest to, że nie jest UICollectionViewLayout ale UICollectionViewFlowLayout.
W Swift można wywołać metodę delegowania sizeForItemAtIndexPath, aby ustawić rozmiar dla każdej komórki.
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
}
}
Mam nadzieję, że to pomaga. Dzięki!
Użyj domyślnego elementu Delegata. . .
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize mElementSize;
mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60);
return mElementSize;
}
Użyłem niestandardowego wyciągnięcia, aby dodać warstwy gradientu, uilim i uiimage w komórce widoku uicollection, a rysunek nie był prawidłowy. Umieszczenie tego kodu w moim głównym kontrolerze widoku rozwiązało problem. – MGM
Jeśli wszystkie komórki mają ten sam rozmiar, bardziej efektywnym sposobem określenia rozmiaru jest ustawienie go w 'UICollectionViewFlowLayout'. na przykład 'flow.itemSize = CGSizeMake (50,100);' –
Ale czy jest jakiś sposób, aby programowo uzyskać dostęp do prototypowej komórki z metody '-collectionView: layout: sizeForItemAtIndexPath:'? (Zapisywanie numeru komórki za pomocą identyfikatora ponownego użycia nie działa, ponieważ to kończy się wywołaniem metody określania rozmiaru, co powoduje nieskończoną pętlę). – erikprice