2009-08-20 13 views
7

Mam wiele wierszy wstawiam do tabeli za pomocą -insertRowsAtIndexPaths: withRowAnimation, i chciałbym, aby wiersze były wcięte z lewej strony, aby odróżnić je od reszty komórek. Właściwość UITableViewCell wcentationLevel wygląda dokładnie tak, jak jest to potrzebne, ale wydaje się, że nic nie robi. Oto kod używam ustawić poziom wcięcia (składnia kropka nie robi różnicy):Właściwość indentationLevel nie wydaje się nic robić?

[cell setIndentationWidth:10]; 
[cell setIndentationLevel:1]; 

Czy indentationLevel czego chcę, czy mam szukać gdzie indziej?

Odpowiedz

0

Wszystko, co przeczytałem, sugeruje, że tak powinieneś to zrobić. Upewnij się, że nie tworzysz nowej komórki z tym samym wskaźnikiem w dalszej części kodu (po ustawieniu wcięcia, ale zanim zostanie narysowane). Czy próbowałeś ustawić wcięcie na coś większego, co byłoby bardziej zauważalne na ekranie (powiedzmy, 100px zamiast 10)?

+0

Kiedy mówisz wskaźnik, nie odwołujesz się do identyfikatora, prawda? Moje komórki są obiektami z tej samej klasy, więc wyobrażam sobie, że wszystkie one są wskaźnikami do tego samego obiektu. Identyfikator mojej komórki jest jednak oparty na pełnej ścieżce indexPath i dlatego jest unikalny dla każdej komórki. Wciąż nie ma jednak radości z wcięcia. – JoBu1324

+0

Potwierdziłem, że poziom wcięcia i szerokość są ustawiane w komórce, zanim komórka zostanie zwrócona do systemu operacyjnego w celu wyświetlenia. Co może być nie tak? – JoBu1324

1

Być może nadmiernie jeździsz w swoich komórkach. w

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     if (cell == nil) 
     { 
      cell = (UITableViewCell*)[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cellType01"] autorelease]; 
      [cell setIndentationLevel:indexPath.row]; 
      [cell setIndentationWidth:10]; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
      // Tag the view 
      [[[cell subviews] objectAtIndex:0] setTag:111]; 
      UILabel* labelView = [[UILabel alloc] initWithFrame: CGRectMake(cell.indentationLevel*cell.indentationWidth, 0, 300, 20)]; 
     } 
    } 
14

indentationLevel i indentationWidth wpływa na pozycjonowanie standardowych elementów textLabel, detailTextLabel i ImageView. Nie wpływają one na pochodzenie ramki contentView.

Jeśli nie używasz textLabel itp. (Być może dlatego, że celujesz w system operacyjny iPhone OS 2), musisz postępować z wcięciem ręcznie, jak pokazuje poprzednia odpowiedź.

1

Wpadłem na podobny problem z moją aplikacją. Miałem numer UITableView, który NIE korzystał z komórek niestandardowych. Używałem stylu UITableViewCell ze stylem podstawowym. W mojej delegowanej metodzie - (UITableViewCell *)tableView: cellForRowAtIndexPath: ustawiam komórki indentationWidth i indentationLevel. Nic nie zrobili. Próbowałem nawet zmodyfikować metodę delegata - (NSInteger)tableView: indentationLevelForRowAtIndexPath:. Nic.

W końcu udało się przejść do serii ujęć i zmodyfikować atrybuty samej komórki widoku tabeli. Gdy ustawiłem tam szerokość wcięcia, zacząłem uzyskiwać właściwe wcięcia. Właściwość indentationLevel zaczęła działać. Przydał się nawet - (NSInteger)tableView: indentationLevelForRowAtIndexPath:.

W zasadzie wygląda na to, że właściwość indentationWidth jest ignorowana na rzecz "Szerokość wcięcia" w serii ujęć.

To z Xcode 5.0.2 kierowania iOS 7.

3

Wydaje się to być błąd w iOS 7, jeśli nie używasz własnych komórek.

Ustawienie indentationLevel lub w ramach tableView:cellForRowAtIndexPath: nie ma wpływu na układ komórki, gdy nadejdzie czas jej wyświetlenia.

Rozważmy na przykład następujący kod:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    BOOL isIndented = indexPath.row % 2; 

    cell.textLabel.text = isIndented ? @"Indented" : @"Not indented"; 
    cell.indentationLevel = isIndented; 
} 

nie mam wystarczająco dużo reputacji, aby opublikować zdjęcia, ale wynik jest różny od iOS 6 i iOS 7. To jest przy użyciu Xcode 5 i iOS 7 SDK.

+0

Czy możesz podać jakieś rozwiązanie lub obejść? –

+2

Obejście polega na użyciu niestandardowej komórki, nawet jeśli ma ona emulować domyślny styl komórki. Po prostu utwórz nową podklasę UITableViewCell i, w zależności od tego, czy używasz Storyboardów lub plików Nib, skonfiguruj komórkę prototypu lub zarejestruj plik Nib odpowiednio do użycia przez twoją podklasę komórki. – Skyboat

0

Wiem, że to pytanie jest 4 lat, ale jeśli jesteś już użyciu niestandardowej podklasy UITableViewCell, i jesteś już dodając swoje poglądy jako subviews z contentView upewnij się, że nie jesteś w nadrzędnymi layoutSubviews twoja komórka. Jeśli tak, musisz dostosować ograniczenia/centrum lub ramkę contentView ręcznie, w layoutSubviews.

Powiązane problemy