2012-06-27 17 views
5

Chcę, aby mój tekst był wyrównany.Wyrównanie tekstu UILabel w prawo

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"] autorelease]; 
CGSize textSize = { 210.0, 10000.0 }; 
CGSize size = [[gMessageArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap]; 

UILabel *lisnerMessage=[[[UILabel alloc] init] autorelease]; 
lisnerMessage.backgroundColor = [UIColor clearColor]; 
[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 
lisnerMessage.numberOfLines=0; 
lisnerMessage.textAlignment=UITextAlignmentRight; 
lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; 
[cell.contentView addSubview:lisnerMessage]; 
return cell 
} 

ale mój tekst nie jest wyrównać tuż proszę o pomoc

+0

To nie jest odpowiedź na pytanie, ale komentarz na logice. Czy na pewno chcesz dodać dodatkową etykietę do swojej komórki za każdym razem, gdy tabela jest odświeżana? –

+0

@PhillipMills: dla każdej komórki mam inny tekst, a nie dodatkowy tekst w tej komórce –

+0

O ile nie ma gdzieś kodu, który usuwa stare etykiety z twoich komórek, to, co wysłałeś, doda zawsze jeszcze jedną etykietę za każdym razem, gdy zostanie wywołane dla określonej ścieżki indeksu . –

Odpowiedz

9

Ponieważ używasz sizeWithFont a następnie ustawienie ramki do tego rozmiaru, tekst jest wyrównany w prawo. Spróbuj dodać do etykiety kolor tła jasnoszarego, aby zobaczyć, o czym mówię. Twoja etykieta powinna mieć taki sam rozmiar jak komórka tabeli i pozwolić tekstowi na przepływ w niej. Następnie zostanie wyrównany w prawo.

Aktualizacja z próbki

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"]; 

    UILabel *lisnerMessage = [[UILabel alloc] init]; 
    lisnerMessage.backgroundColor = [UIColor clearColor]; 
    [lisnerMessage setFrame:cell.frame]; 
    lisnerMessage.numberOfLines = 0; 
    lisnerMessage.textAlignment = NSTextAlignmentRight; 
    lisnerMessage.text = [gMessageArray objectAtIndex:indexPath.row]; 
    [cell.contentView addSubview:lisnerMessage]; 

    return cell 
} 
+0

: Czy możesz rozwinąć lub umieścić kod dotyczący twojej odpowiedzi. To będzie dla mnie bardzo pomocne –

+1

Tak, sztuczka z innym kolorem tła jest dobra. Pomoże to Alokowi zrozumieć, co się dzieje. Używanie sizeWithFont jest w zasadzie w porządku, ale nie użyłbym size.with dla ramki. Użyj [lisnerMessage setFrame: CGRectMake (75, 20, textSize.width + 5, size.height + 2)]; zamiast. –

+0

Edytowałem Twój kod z prostym przykładem potrzebnych zmian. Nie testowałem tego w Xcode, ale to jest pomysł. po prostu odbuduj swoją logikę odpowiednio. –

0

Dlaczego nie można po prostu zrobić etykietę interfejs Konstruktor/ujęć i wybrać opcję „prawo wyrównać”? Następnie podłącz go jako właściwość o nazwie lisnerMessage i lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; To znacznie obniży ilość pisanego kodu i zdecydowanie zadziała.

1

W końcu rozwiązałem mój problem. Robiłem mały błąd

[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 

po prostu usunąć size.width i dać mój specyficzny koordynować 200 po tym tekst jest wyrównać prawo.

[lisnerMessage setFrame:CGRectMake(75 ,20,200,size.height+2)]; 

Dzięki wszystkim za odpowiedź

5

Prawy wyrównania dla wytwórni

yourLabel.textAlignment = NSTextAlignmentRight; 
Powiązane problemy