2014-09-16 16 views
30

Sto tentando di rinunciare all'utilizzo di NSAttributedString nel mio viewController, scegliendo di utilizzare l'opzione "Attribuito" (come indicato in "Normale") nel campo "testo" dell'ispettore attributi per un UILabel.Utilizzo del testo dell'etichetta "attribuito" in Interface Builder

ho selezionato le singole parole che voglio attribuire, e hanno cambiato il loro carattere, questo si riflette correttamente nella finestra di testo di anteprima e sulle scene in IB stessa:

enter image description here

Tuttavia, il simulatore non riflette queste modifiche, sembra che durante il runtime il carattere specificato per gli attributi non venga usato (quando cambio un colore, funziona come previsto). Ho aggiunto i tipi di carattere al mio progetto e alla mia plist senza alcun risultato:

enter image description here

ho trovato alcuna documentazione su questa funzione e si può benissimo essere simile alla funzione di 'stili di testo' in IB (essenzialmente inutile per ora) - ma volevo solo vedere se qualcuno avesse avuto fortuna nel fare qualcosa di simile in passato.

Qualsiasi aiuto o suggerimento è molto apprezzato, grazie.

Modifica 03/07/15 bene, sono lieto di comunicare che questo problema è finalmente risolto in Xcode 7 (ancora in beta). Quindi possiamo finalmente mettere a riposo questo problema. Grazie a tutti quelli che hanno cercato di capirlo insieme a me.

+0

Si prega di fornire la propria versione Xcode – Jamil

+0

Si stavano utilizzando le classi di dimensioni per l'etichetta nel builder dell'interfaccia? Voglio dire, stavi cercando di impostare diverse dimensioni dei caratteri per diverse classi di dimensioni tramite il generatore di interfacce? – uchiha

+1

Sto ancora avendo questo problema in Xcode 7.1 (7B91b). – Gordonium

risposta

-2

Ho funzionato in xcode 6.1. Ho aggiunto un UILabel con le parole "Hello World" e ho cambiato il font in Didot.

Ecco il codice xml del mio storyboard. Abbinare questo contro la tua e vedere se qualcosa è storto

<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cd6-WA-P1d"> 
          <rect key="frame" x="20" y="91" width="275" height="21"/> 
          <attributedString key="attributedText"> 
           <fragment content="Hello World"> 
            <attributes> 
             <color key="NSColor" cocoaTouchSystemColor="darkTextColor"/> 
             <font key="NSFont" size="24" name="Didot"/> 
             <paragraphStyle key="NSParagraphStyle" alignment="right" lineBreakMode="wordWrapping" baseWritingDirection="natural"/> 
            </attributes> 
           </fragment> 
          </attributedString> 
          <nil key="highlightedColor"/> 
         </label> 
+0

Questo perché Didot è uno dei font iOS predefiniti (http://iosfonts.com/). Prova a farlo con un font che non è nella lista. Ancora non funziona per me in 6.1. –

-2

stavo cercando di fare questo con le etichette attribuite in una cella di base vista tabella di stile.
Non appena si seleziona l'opzione "Attribuito" in Interface Builder, i caratteri personalizzati non vengono visualizzati nel selettore di font.

Si potrebbe notare che il selettore di font è il selettore di font di sistema predefinito.

Il trucco è installare i font in/Library/Fonts. Ora appariranno nella finestra di dialogo dei caratteri quando cambi l'etichetta in Attributo, così come nella visualizzazione dello storyboard e in anteprima.

Tuttavia, questo è ancora non funziona in fase di esecuzione. E se si visualizza lo storyboard su un altro computer senza il font installato, Interface Builder tornerà ad una "corrispondenza ravvicinata" (Lucida Grande nel mio caso).

C'è un vantaggio in tutto questo: se si sta sperimentando con la formattazione di fantasia, è bello vederlo dal vivo in Interface Builder. Quindi puoi guardare la fonte per lo storyboard e copiare gli attributi nel codice sorgente.
Non dimenticare di reimpostare l'etichetta su "Semplice" in Interface Builder, altrimenti i problemi di "stretta corrispondenza" si verificano come descritto sopra.

+0

Il reset dell'etichetta su "Normale" significa che si perde un sacco di opzioni su come viene eseguito il rendering del testo, quindi questa non è mai una soluzione ... – xaphod

-3

Si modifica il testo di tale etichetta nel codice. Quando si usa l'attributo config dell'etichetta in Interface Builder, non modificare alcuna cosa relativa a questa etichetta nel codice.

1

Problema di caratteri. Soluzione per questo: pulire/pulire la cartella di build. A volte aiuto. /AGGIORNAMENTO: So che questo sembra uno "stupido consiglio" - ma nel mio caso ha fatto un trucco, quindi postalo qui - per salvare forse il tempo di qualcuno.

2

In Xcode 7.0 beta: ho trovato che funziona.

Storyboard: http://imgur.com/Wb5H4ds

uscita:

http://imgur.com/iOV8tJF

O .È possibile farlo in modo dinamico.

-(void)attributedText{ 
UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(20, 100, 200, 44)]; 

NSString *newsTitle = @"Hello"; 
NSString *sportTtle = @"World"; 
NSString *title = [NSString stringWithFormat:@"%@ %@", newsTitle,sportTtle]; 
textView.text = title; 

UIColor *color = [UIColor redColor]; 
UIFont *font = [UIFont fontWithName:@"Arial" size:20.0]; 

NSDictionary *attrs = @{NSForegroundColorAttributeName : color,NSFontAttributeName:font}; 

NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithAttributedString:textView.attributedText]; 
[attrStr addAttributes:attrs range:[textView.text rangeOfString:sportTtle]]; 
textView.attributedText = attrStr; 
[self.view addSubview:textView]; 
} 
Problemi correlati