Pracowałem nad tym od około 2 dni, więc pomyślałem, że podzielę się z wami swoimi doświadczeniami.
Pytanie brzmi: czy można zmniejszyć szerokość komórki w zgrupowanym widoku UITableView?
Odpowiedź brzmi nie.
Ale istnieją dwa sposoby obejścia tego problemu.
Rozwiązanie nr 1: Cieńszy stół Można zmienić ramkę tableView, tak aby tabela była mniejsza. Spowoduje to renderowanie komórki przez UITableView o zmniejszonej szerokości.
Rozwiązanie tego może wyglądać następująco:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Rozwiązanie nr 2: renderowanie komórek przez obrazy
Rozwiązanie to opisano tutaj: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Mam nadzieję, że te informacje są dla Ciebie pomocne. Wypróbowanie wielu możliwości zajęło mi około 2 dni. Oto, co zostało.
ios
iphone
uitableview
width
Tomen
źródło
źródło
Odpowiedzi:
Lepszym i czystszym sposobem osiągnięcia tego jest podklasa UITableViewCell i zastąpienie jej
-setFrame:
metody w następujący sposób:Dlaczego to jest lepsze? Ponieważ pozostałe dwa są gorsze.
Dostosuj szerokość widoku tabeli w
-viewWillAppear:
Przede wszystkim jest to zawodne, kontroler nadzoru lub nadrzędnego widoku może dalej regulować ramkę widoku tabeli po
-viewWillAppear:
wywołaniu. Oczywiście możesz podklasować i przesłonić-setFrame:
dla swojego UITableView, tak jak to, co robię tutaj dla UITableViewCells. Jednak tworzenie podklas UITableViewCells jest bardzo powszechnym, lekkim i Apple sposobem.Po drugie, jeśli twój UITableView ma backgroundView, nie chcesz, aby jego backgroundView był zawężany razem. Utrzymywanie szerokości backgroundView podczas zawężania szerokości UITableView nie jest trywialną pracą, nie wspominając o tym, że rozszerzanie podglądów podrzędnych poza jego superview nie jest przede wszystkim elegancką rzeczą do zrobienia.
Renderowanie niestandardowych komórek w celu sfałszowania węższej szerokości
Aby to zrobić, musisz przygotować specjalne obrazy tła z poziomymi marginesami i musisz samodzielnie ułożyć podglądy komórek, aby uwzględnić marginesy. Dla porównania, jeśli po prostu dostosujesz szerokość całej komórki, automatyczna zmiana rozmiaru wykona całą pracę za Ciebie.
źródło
Aby to zrobić w języku Swift, który nie zapewnia metod ustawiania zmiennych, będziesz musiał nadpisać metodę ustawiającą
frame
. Pierwotnie opublikowane (przynajmniej tam, gdzie je znalazłem) tutajźródło
Jeśli nic nie działa, możesz spróbować
Ustaw kolor tła komórki jako czysty kolor, a następnie umieść obraz komórki o wymaganym rozmiarze. Jeśli chcesz wyświetlić tekst w tej komórce, umieść etykietę nad obrazem. Nie zapomnij ustawić koloru tła etykiety również na wyraźny kolor.
źródło
Zauważyłem, że zaakceptowane rozwiązanie nie działa po rotacji. Aby uzyskać UITableViewCells ze stałymi szerokościami i elastycznymi marginesami, właśnie dostosowałem powyższe rozwiązanie do następującego:
Metoda jest wywoływana za każdym razem, gdy urządzenie się obraca, więc komórki zawsze będą wyśrodkowane.
źródło
Istnieje metoda wywoływana podczas obracania ekranu: viewWillTransitionToSize
Tutaj powinieneś zmienić rozmiar ramki. Zobacz przykład. Zmieniaj współrzędne ramy według potrzeb.
źródło
robię to w
I to zadziałało dla mnie
źródło
W pliku .h dodaj delegata „UITableViewDataSource”
źródło