Mam kilka obrazów, których używam do widoków obrazów komórki, wszystkie nie są większe niż 50x50. np. 40x50, 50x32, 20x37 .....
Kiedy ładuję widok tabeli, tekst nie jest wyrównany, ponieważ szerokość obrazów jest różna. Chciałbym również, aby małe obrazy pojawiały się w środku, a nie po lewej stronie.
Oto kod, który próbuję w mojej metodzie „cellForRowAtIndexPath”
cell.imageView.autoresizingMask = ( UIViewAutoresizingNone );
cell.imageView.autoresizesSubviews = NO;
cell.imageView.contentMode = UIViewContentModeCenter;
cell.imageView.bounds = CGRectMake(0, 0, 50, 50);
cell.imageView.frame = CGRectMake(0, 0, 50, 50);
cell.imageView.image = [UIImage imageWithData: imageData];
Jak widać, wypróbowałem kilka rzeczy, ale żadna z nich nie działa.
self.imageView.bounds
obraz zostanie wyśrodkowany.UITableViewCell
?Dla tych z Was, którzy nie mają podklasy
UITableViewCell
:Powyższy kod ustawia rozmiar na 40x40.
Szybki 2
Lub możesz użyć innego (nie przetestowanego) podejścia sugerowanego przez @Tommy:
Swift 3+
Powyższy kod jest wersją Swift 3+ powyższego.
źródło
UIScreen.mainScreen.scale
więc po prostu poszedłemUIGraphicsBeginImageContext
. Zmieniono również rozmiar imageView w podstawowej komórce.Oto jak to zrobiłem. Ta technika pozwala odpowiednio przesuwać tekst i szczegółowe etykiety tekstowe w lewo:
źródło
widok obrazu dodaj jako widok podrzędny do komórki widoku tabeli
źródło
Cała komórka nie musi być przerabiana. Możesz użyć indentationLevel i indentationWidth właściwości tableViewCells, aby przesunąć zawartość komórki. Następnie dodaj swój niestandardowy imageView po lewej stronie komórki.
źródło
Lepiej utwórz widok obrazu i dodaj go jako widok podrzędny do komórki, aby uzyskać żądany rozmiar ramki.
źródło
Po prostu szybki ,
Krok 1: Utwórz jedną podklasę
UITableViewCell
kroku 2: Dodaj tę metodę do SubClass of UITableViewCell
Krok 3: Utwórz obiekt komórki za pomocą tej podklasy w
cellForRowAtIndexPath
,Krok 4: Ciesz się
źródło
źródło
To zadziałało dla mnie szybko:
Utwórz podklasę UITableViewCell (upewnij się, że łączysz komórkę w serii ujęć)
W cellForRowAtIndexPath usuń z kolejki komórkę jako nowy typ komórki:
Oczywiście zmień wartości liczbowe, aby pasowały do twojego układu
źródło
Stworzyłem rozszerzenie używając odpowiedzi @GermanAttanasio. Zapewnia metodę zmiany rozmiaru obrazu do żądanego rozmiaru, a także inną metodę, aby zrobić to samo, dodając przezroczysty margines do obrazu (może to być przydatne w przypadku widoków tabeli, w których obraz ma również mieć margines).
źródło
Oto metoda pracy @germanattanasio, napisana dla Swift 3
źródło
Jeśli używasz
cell.imageView?.translatesAutoresizingMaskIntoConstraints = false
, możesz ustawić ograniczenia w imageView. Oto działający przykład, którego użyłem w projekcie. Uniknąłem tworzenia podklas i nie musiałem tworzyć scenorysu z prototypowymi komórkami, ale zajęło mi to trochę czasu, aby uruchomić, więc prawdopodobnie najlepiej używać tylko wtedy, gdy nie ma prostszego lub bardziej zwięzłego sposobu.źródło
Zwykły UITableViewCell działa dobrze do pozycjonowania rzeczy, ale cell.imageView nie wydaje się zachowywać tak, jak chcesz. Zauważyłem, że dość łatwo jest sprawić, aby UITableViewCell rozłożył się poprawnie, najpierw dając cell.imageView obraz o odpowiednim rozmiarze, taki jak
Następnie możesz po prostu podłączyć swój własny poprawnie działający UIImageView z
Ustaw obraz na AnImageView, a zrobi to, czego oczekujesz od UIImageView. Bądź taki, jaki chcesz, niezależnie od obrazu, który mu nadasz. Powinno to znaleźć się w tableView: cellForRowAtIndexPath:
źródło
To rozwiązanie zasadniczo rysuje obraz jako „dopasowanie kształtu” w ramach danego prostego.
źródło
Miałem ten sam problem. Dziękuję wszystkim, którzy odpowiedzieli - udało mi się wspólnie znaleźć rozwiązanie, korzystając z części kilku z tych odpowiedzi.
Moim rozwiązaniem jest użycie Swift 5
Problem, który próbujemy rozwiązać, polega na tym, że możemy mieć obrazy o różnych proporcjach w naszych obrazach,
TableViewCell
ale chcemy, aby były renderowane ze stałą szerokością. Obrazy powinny oczywiście renderować się bez zniekształceń i wypełniać całą przestrzeń. W moim przypadku nie przeszkadzało mi trochę „przycinanie” wysokich, chudych obrazów, więc użyłem trybu treści.scaleAspectFill
Aby to zrobić, utworzyłem niestandardową podklasę
UITableViewCell
. W moim przypadku nazwałem toStoryTableViewCell
. Cała klasa jest wklejona poniżej, z komentarzami w tekście.To podejście zadziałało, gdy korzystałem również z niestandardowego widoku akcesoriów i długich etykiet tekstowych. Oto obraz wyniku końcowego:
Renderowany widok tabeli ze stałą szerokością obrazu
źródło
Rozwiązanie, które otrzymaliśmy, jest podobne do wielu innych. Ale aby uzyskać właściwą pozycję separatora, musieliśmy ustawić go przed wywołaniem
super.layoutSubviews()
. Uproszczony przykład:źródło