Mam dość prostą listę elementów TableViewController, które można sprawdzić w miarę ich gromadzenia. Pomyślnie zaimplementowałem etykietę zawiniętą w słowo w każdej komórce i zaktualizowałem heightForRowAtIndexPath tak, aby każdy wiersz miał odpowiednią wysokość. To działa dobrze:
Uwaga: ustawiłem jaskrawy kolor tła w contentView komórki do celów testowych.
Problem pojawia się, gdy próbuję dodać przycisk zaznaczenia jako akcesoriumView dla każdej komórki:
UIImage *image = [UIImage imageNamed:@"checked.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect frame = CGRectMake(0.0, 0.0, 44.0, 44.0);
button.frame = frame;
[button setImage:image forState:UIControlStateNormal]
button.backgroundColor = [UIColor redColor];
cell.accessoryView = button;
Z jakiegoś powodu wyrównanie nie jest odpowiednie dla moich komórek, które obejmują więcej niż jedną linię, gdy rozmiar przycisku przekracza około 26x26 pikseli.
Powyższy przykład używa 44x44 jako szerokości przycisku.
Czy ktoś może wyjaśnić, o co tu chodzi? Dlaczego miałoby być inne wyrównanie, gdy contentView jest dwuwierszowy, a nie jeden? W rzeczywistości, dla każdej dodatkowej linii używanej przez tekst, wyrównanie jest coraz bardziej przesunięte. Mogę dodać kod do tekstu wiersza, jeśli to pomoże.
2 odpowiedzi
Odkryłem, że można to rozwiązać, ustawiając wysokość przycisku w widoku akcesoriów tak, aby odpowiadała temu, co zostanie obliczone dla wiersza.
Tak więc kod użyty w heightForRow:atIndexPath: powinien zostać skopiowany do cellForRowAtIndexPath i użyty do ustawienia wysokości przycisku.
Miałem ten sam problem i niestety nie potrafię wyjaśnić dziwnego zachowania, ani go nie rozwiązałem. Ale poczyniłem kilka obserwacji, które mogą pomóc innym borykającym się z tym problemem.
Używam UIImageView
jako widoku akcesoriów dla moich komórek i skończyłem na majstrowaniu przy wymiarach obrazu. To, co w końcu zadziałało, to obrazy o rozmiarze około 16x16 pikseli lub mniejszym.
Ponieważ chciałem tylko dość małego obrazu, to zadziałało dla mnie.
Podobne pytania
Nowe pytania
ios
iOS to mobilny system operacyjny działający na urządzeniach Apple iPhone, iPod touch i iPad. Użyj tego tagu [ios] w przypadku pytań związanych z programowaniem na platformie iOS. Użyj powiązanych tagów [objective-c] i [swift] w przypadku problemów specyficznych dla tych języków programowania.