2013-02-09 26 views
5

Mam trzy UILabels w moim niestandardowym UITableViewCell. może się okazać, że niektóre UILabels będzie pusta (label.text == @"")Auto Layout UILabels

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"EventCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


     NSString *key = [[keysArray objectAtIndex:indexPath.section] description]; 

     UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 
     namelabel.text = @"Label 1"; 

     UILabel *locationLabel = (UILabel *)[cell viewWithTag:101]; 
     location.text = @"Label 2"; 

     UILabel *timeLabel = (UILabel *)[cell viewWithTag:102]; 
     timeLabel.text = @""; 

     return cell; 
} 

Jak mogę wyśrodkować wszystkie niepuste UILabels pionowo w komórce przy użyciu automatycznego układu?

Jak to wygląda z trzech etykiet

This is how it looks with three labels:

Jak to wygląda, gdy jeden z UILables jest pusty

How it looks when one of <code>UILables</code> is empty

I to jest jak chcę to wygląda:

And this is how I want it to look:

+0

Czy budujesz komórkę w kodzie lub w konstruktorze interfejsu? Dlaczego ma znaczenie, czy etykiety są puste, czy nie? – jrturton

+0

W IB. Chcę, aby moje etykiety były wyśrodkowane w pojemniku. Nie jest to trudne, ale gdy jedna z etykiet jest pusta, dostaję przerwę między dwiema innymi etykietami, które nie wyglądają ładnie. – Oleg

+1

To może być bardzo trudne, ponieważ pusty UILabel może nie zgłasza szerokości, ale z pewnością wysokości, więc być może będziesz musiał napisać kod wzdłuż linii "jednej z etykiet jest pusty, usuń tę etykietę". – 11684

Odpowiedz

3

Jest to trudne do osiągnięcia, ale prosta skrótu może mieć pojedynczą etykietę zamiast trzech linii tekstu, ograniczonej, aby wypełnić całą wysokość komórki. Etykieta automatycznie wyśrodkuje zawartość w pionie.

Będziesz miał trzy właściwości ciągu na komórce zamiast trzech etykiet, a twoje setery zbudują końcowy ciąg znaków (używając \n dla nowych linii) i ustawi tekst etykiety.

Jeśli każda linia tekstu ma inną stylizację, nie ma problemu, ponieważ można użyć przypisanych ciągów.

+0

Bardzo ładne podejście! Zrobisz tak, jak sugerujesz. I użyje przypisanych ciągów, ponieważ moje etykiety mają inną stylizację! Dziękuję Ci! – Oleg

+0

Właściwie myślałem, że ktoś zasugeruje programowe dodawanie/modyfikowanie ograniczeń, ale to rozwiązanie jest znacznie prostsze! – Oleg

+0

Modyfikowanie ograniczeń jest możliwe, ale na pewno trudniejsze niż robienie tego w ten sposób. Może również wpływać na wydajność przewijania, ponieważ dodajesz/usuniesz subviews lub zmienisz układ, gdy każda komórka pojawi się na ekranie, co jest kosztowną operacją. – jrturton

Powiązane problemy