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.

enter image description here

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.

enter image description here

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
Ben Packard 21 luty 2012, 06:09

2 odpowiedzi

Najlepsza odpowiedź

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.

3
Ben Packard 3 wrzesień 2012, 05:41

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.

0
Josh Darnell 15 maj 2012, 00:34