2013-05-06 11 views
11

Chcę tylko podświetlić tylko tekst w UILabel, próbowałem podając backgroundColor dla etykiety, ale to jest podświetlanie pustych przestrzeni również wygląda źle. Czy istnieje sposób podświetlenia tekstu bez zmiany rozmiaru UILabel.Jak wyróżnić tylko tekst w UILabel - IOS

Proszę sprawdzić obraz, tutaj etykiety są większe niż tekst (centrum wyrównane)

enter image description here

Thanx.

+0

trzeba będzie użyć 'NSAttributedString'. –

+0

@MikeWeller Czy możesz podać więcej szczegółów ... – Newbee

+0

Myślę, że chcesz, aby tło było jasne. set label.backgroundColor = [UIColor clearColor]; Label.highlightedTextColor = [UIColor greenColor]; – Ashini

Odpowiedz

22

Większość innych rozwiązań nie uważają, że tekst obejmuje wiele linie, a jednocześnie podkreślają tylko tekst, a wszystkie są dość hacky z udziałem dodatkowych subviews.

IOS 6 i później rozwiązaniem jest użycie przypisywane ciągi:

NSMutableAttributedString *s = 
    [[NSMutableAttributedString alloc] initWithString:yourString]; 

[s addAttribute:NSBackgroundColorAttributeName 
      value:[UIColor greenColor] 
      range:NSMakeRange(0, s.length)]; 

label.attributedText = s; 
+0

Nie mam pojęcia o NSMutableAttributedString jeszcze, w każdym razie działa dobrze. dzięki. – Newbee

+3

Próbowałem powyższego procesu. To nie działa dobrze ze mną.: | http://i.imgur.com/XhuVL9q.png?1 –

+0

To nie działa zgodnie z oczekiwaniami na pytanie: dodaje również kolor tła do pustych przestrzeni utworzonych przez zawijanie słów. Sprawdź: [Zaznacz tylko tekst w UILabel] (http://stackoverflow.com/questions/31293873/highlight-just-the-text-in-a-uilabel?rq=1) – Damasio

1

spróbować

MTLabel

MTLabel *label4 = [MTLabel labelWithFrame:CGRectMake(20, 270, 250, 60) 
            andText:@"This label is highlighted, has a custom line height, and adjusts font size to fit inside the label."]; 
     [label4 setLineHeight:22]; 
     [label4 setFont:[UIFont fontWithName:@"Helvetica" size:30]]; 
     [label4 setAdjustSizeToFit:YES]; 
     [label4 setMinimumFontSize:15]; 
     [label4 setFontHighlightColor:[[UIColor orangeColor] colorWithAlphaComponent:0.5]]; 
     [self.view addSubview:label4]; 
-3

Można mieć UIImageView, ustawić kolor tła do wyboru następnie umieść UILabel na nim. To z pewnością rozwiąże Twój problem. Oto kod Obejście:

UIImageView * imgView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 100, 40)]; 
[imgView setBackgroundColor:[UIColor brownColor]]; 
[self.view addSubview:imgView]; 


UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 40)]; 
[label setBackgroundColor:[UIColor clearColor]]; 
[label setTextAlignment:UITextAlignmentCenter]; 
label.text = @"My Label"; 
[imgView addSubview:label]; 


[label release]; 
[imgView release]; 

można również osiągnąć to samo za pomocą interfejsu Builder.

+0

Obraz w tle również obejmie cały dokument UIlabel ... – Newbee

+0

Proszę sprawdzić poprawioną odpowiedź –

+0

Proszę podać przyczynę odrzucenia głosowania !! Więc mogę poprawić moją odpowiedź. –

3

To doda podrzędny za tekstem, o odpowiednim rozmiarze:

CGSize size= [[label text] sizeWithFont:[UIFont systemFontOfSize:18.0]]; 
NSLog(@"%.1f | %.1f", size.width, size.height); 
NSLog(@"%.1f | %.1f", label.frame.size.width, label.frame.size.height); 

UIView *highlightView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]; 
[highlightView setBackgroundColor:[UIColor greenColor]]; 
[self.view insertSubview:highlightView belowSubview:label]; 
[highlightView setCenter:label.center]; 

I nie zapomnij: [label setBackgroundColor:[UIColor clearColor]];

+3

To nie będzie działać poprawnie, jeśli tekst jest zawijany w wielu wierszach. Ten zielony widok może tworzyć tylko pojedyncze prostokąty. Jeśli druga linia ma tylko jedno słowo, cała linia zostanie podświetlona. –

+0

Zgadza się, ale jeśli musisz obsługiwać dowolny iOS <6 i nie możesz użyć 'NSMutableAttributedString', może to być najprostsze rozwiązanie. – xapslock

Powiązane problemy