2013-10-24 11 views
21

Voglio avere due righe di testo appaiono davvero ravvicinati (interlinea piccolo) per un pulsante. Ho il seguente codice:Davvero le linee vicine con NSAttributedString?

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"50 WPM"]; 

NSMutableParagraphStyle *paragrapStyle = [[NSMutableParagraphStyle alloc] init]; 
paragrapStyle.alignment = NSTextAlignmentCenter; 
paragrapStyle.lineSpacing = -10; 

[string addAttribute:NSParagraphStyleAttributeName value:paragrapStyle range:NSMakeRange(0, string.length)]; 

UIFont *font1 = [UIFont systemFontOfSize:22.0]; 
[string addAttribute:NSFontAttributeName value:font1 range:NSMakeRange(0, string.length - 4)]; 

UIFont *font = [UIFont systemFontOfSize:15.0]; 
[string addAttribute:NSFontAttributeName value:font range:NSMakeRange(string.length - 3, 3)]; 

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

[self.button setAttributedTitle:string forState:UIControlStateNormal]; 

Ma come interlinea non può essere negativo, non ottiene quasi il più vicino come mi piacerebbe che fosse. Ecco come si presenta:

enter image description here

C'è un modo per farli più vicino?

+0

Hai provato la regolazione '' proprietà paragraphSpacing' e paragraphSpacingBefore' dello stile paragrafo? – Joshua

+0

Ho provato sotto 'paragraphStyle.lineSpacing = -10;' per impostare tali attributi su 'paragrapStyle' a 0 (così come -10 postfazione) e nessuno aveva alcun effetto evidente. –

+0

@DougSmith utilizzi il valore negativo per l'interlinea come per apple doc. Prova qualcosa come (0,0000001). – Exploring

risposta

0

Vorrei suggerire leggendo su TextKit che è stato introdotto nel iOS7. Non ho molta esperienza da questo, ma so che ti dà molte possibilità quando si tratta di attribuire i tuoi testi.

+0

C'è una vera mancanza di tutorial di TextKit per qualcosa di semplice come questo, sfortunatamente. Mi sento perso in un mare di complessità. –

+0

Questo è purtroppo vero. Ray Wenderlich fa tutorial fantastici, forse potresti provare il suo! http://www.raywenderlich.com/50151/text-kit-tutorial –

-1

Informazioni sulla sottoclasse UIButton e aggiungere 2 UILabels alla vista pulsanti che sono vicini. Creare proprietà per le etichette e impostare approrpietly:

CustomButton *btn = [CustomButton new]; 

btn.textLine1 = @"Top"; 
btn.textLine2 = @"Bottom"; 

L'unico problema facendo in questo modo è che sarà necessario gestire il colore del testo quando lo stato cambia da soli.

51

Beh, se si dispone di una stringa di attributo allora tutto dovrebbe essere possibile. :) Devi solo guardare di più.

- (void)setMinimumLineHeight:(CGFloat)aFloat 
- (void)setMaximumLineHeight:(CGFloat)aFloat 

Prova

[paragraphStyle setLineSpacing:0.0f]; 
[paragraphStyle setMaximumLineHeight:7.0f]; 

vi renderete conto che non è maximumLineHeight maximumLineSpacing. ^^

Questo per esempio è con setMaximumLineHeight: 12];

enter image description here

+11

Il mio problema non è che il testo viene tagliato fuori. –

+1

Cosa succede se si disattiva 'masksToBounds' o si aggiunge una rettifica di base o una trasformazione di traduzione? – nielsbot

0

In Swift 3, è possibile raggiungere questo obiettivo:

let paragraph = NSMutableParagraphStyle() 
paragraph.lineSpacing = 0 
paragraph.maximumLineHeight = 20. 

Mantenere l'interlinea = 0. È possibile regolare il maximumLineHeight per renderlo più vicino o per aumentare la spaziatura.

0

Ecco un po 'di estensione in Swift3 che sostiene interlinea negativa

extension UILabel { 
    func set(lineSpacing: CGFloat, textAlignment: NSTextAlignment = NSTextAlignment.center) { 
     if let text = self.text { 
      let paragraphStyle = NSMutableParagraphStyle() 
      if lineSpacing < 0 { 
       paragraphStyle.lineSpacing = 0 
       paragraphStyle.maximumLineHeight = self.font.pointSize + lineSpacing 
      } else { 
       paragraphStyle.lineSpacing = lineSpacing 
      } 
      let attrString = NSMutableAttributedString(string: text) 
      attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length)) 
      self.attributedText = attrString 
      self.textAlignment = textAlignment 
     } 
    } 
} 
Problemi correlati