[ios] La stringa attribuita con caratteri personalizzati nello storyboard non viene caricata correttamente



Answers

La risposta più semplice che ha funzionato è quella di trascinare i caratteri in FontBook. Se i font sono nel tuo progetto ma non nel FontBook del tuo computer, IB a volte ha problemi a trovarlo. Strano, ma ha funzionato per me in diverse occasioni.

Question

Utilizziamo font personalizzati nel nostro progetto. Funziona bene in Xcode 5. In Xcode 6, funziona in testo normale, attribuito stringa nel codice. Ma quelle stringhe attribuite impostate nello storyboard tornano tutte su Helvetica quando sono in esecuzione su simulatore o dispositivo, anche se sembrano a posto nello storyboard.

Non sono sicuro se si tratta di un bug di Xcode 6 o iOS 8 SDK, oppure il modo di usare caratteri personalizzati è stato modificato in Xcode 6 / iOS 8?




La soluzione di @Hamidptb funziona, assicurati di ottenere il nome corretto del carattere (una volta che lo hai aggiunto al Libro dei font)

  • Apri l'applicazione Libro Font, vai al font e premi Comando + I. Il nome PostScript è il nome del font che si desidera utilizzare qui:

    UILabel.appearance (). Font = UIFont (nome: " PostScriptName ", dimensione: 17)




Lo stesso problema.

Risolto: basta selezionare Selezionabile in TextView. Senza questo ho un font di sistema standard.




Stavo cercando di ottenere celle TableView con testo con più paragrafi. Le stringhe attribuite sembravano essere un modo per ottenere ulteriore spazio tra i paragrafi (qualcosa di un po 'più bello che fare due line-feed nella stringa). È venuto attraverso questo e altri post quando ho scoperto che le impostazioni di IB non si applicavano in fase di esecuzione quando si voleva inserire testo diverso nella cella.

La cosa principale che mi è venuta in mente è stata l'aggiunta di un'estensione a String (usando Swift) per creare una stringa attribuita con determinate caratteristiche. Esempio qui usa il carattere Marker Felt, poiché è facilmente distinguibile da Helvetica. L'esempio mostra anche un piccolo extra di spaziatura tra i paragrafi per renderli più distinti l'uno dall'altro.

extension String {
func toMarkerFelt() -> NSAttributedString {
    var style = NSMutableParagraphStyle()
    style.paragraphSpacing = 5.0
    let markerFontAttributes : [NSObject : AnyObject]? = [
        NSFontAttributeName : UIFont(name: "Marker Felt", size: 14.0)!,
        NSParagraphStyleAttributeName: style,
        NSForegroundColorAttributeName : UIColor.blackColor()
    ]
    let s = NSAttributedString(string: self, attributes: markerFontAttributes)
    return s
    }
}

Quindi, nel mio tableViewCell personalizzato, gli invii il testo che vuoi e lo converte in una stringa attribuita su UILabel.

//  MarkerFeltCell.swift
class MarkerFeltCell: UITableViewCell {
@IBOutlet weak var myLabel: UILabel!
func configureCellWithString(inputString : String) {
    myLabel.attributedText = inputString.toMarkerFelt()
}}

Nella vista controller con tableView, dovresti registrare la tua cella in viewDidLoad () - Ho usato un pennino, quindi qualcosa del tipo:

let cellName = "MarkerFeltCell"
tableView.registerNib(UINib(nibName: cellName, bundle: nil), forCellReuseIdentifier: cellName)

Per fare in modo che la cella calcoli quanto deve essere alto, crea una cella prototipo che viene utilizzata per ottenere informazioni sulle dimensioni e non viene mai aggiunta a TableView. Quindi, nella tua vista le variabili del controller:

var prototypeSummaryCell : MarkerFeltCell? = nil

Quindi in (probabilmente sostituisci - a seconda del controller di visualizzazione) heightForRowAtIndexPath:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        // ...
    if xib == "MarkerFeltCell" {
            if prototypeCell == nil {
                prototypeCell = tableView.dequeueReusableCellWithIdentifier(xib) as? MarkerFeltCell
            }
            let width : CGFloat = tableView.bounds.width
            let height : CGFloat = prototypeCell!.bounds.height
            prototypeCell?.bounds = CGRect(x: 0, y: 0, width: width, height: height)
            configureCell(prototypeCell!, atIndexPath: indexPath)
            prototypeSummaryCell?.layoutIfNeeded()
            let size = prototypeSummaryCell!.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
            let nextHeight : CGFloat = ceil(size.height + 1.0)
            return nextHeight
    } else {  // ...

Nel codice sopra, il prototypeCell sarà riempito la prima volta che è necessario. Il prototypeCell viene quindi utilizzato per calcolare l'altezza della cella dopo aver attraversato il processo di autosizing. Sarà necessario arrotondare l'altezza con la funzione ceil (). Ho anche aggiunto un fattore extra di caramelle.

Il bit di codice finale è il modo in cui si configura il testo per la cella. Per questo esempio, semplicemente:

func configureCell(cell :UITableViewCell, atIndexPath indexPath: NSIndexPath) {
    if let realCell = cell as? MarkerFeltCell  {
        realCell.configureCellWithString("Multi-line string.\nLine 2.\nLine 3.")    // Use \n to separate lines
    }
}

Inoltre, ecco uno scatto del pennino. Appunta l'etichetta ai bordi della cella (con il margine desiderato), ma ha utilizzato un vincolo "Maggiore o uguale a", con una priorità inferiore a "Richiesto" per il vincolo inferiore.

Imposta il carattere dell'etichetta su Attribuito. Il carattere effettivo di IB non ha importanza.

Il risultato in questo caso:




Fare doppio clic e installare il carattere sul sistema. Funzionerà (Xcode 8.2)




È possibile aggiungere caratteri personalizzati al libro dei caratteri.

Passaggio 1 : fare clic su Gestisci caratteri. Apre il libro dei caratteri.

Step2 : Clicca su più e aggiungi i tuoi caratteri.

La prossima volta che clicchi su font con testo attribuito, il font appena aggiunto verrà mostrato anche nella lista. Ma assicurati che il tuo carattere personalizzato sia aggiunto in info.plist e raggruppa le risorse.




Ho incontrato lo stesso problema: il font di attributo impostato per TextView nello storyboard non funzionava in fase di esecuzione con XCode 6.1 e iOS 8 SDK.

Ecco come ho risolto questo problema, potrebbe essere una soluzione per te:

  1. apri l'ispettore attributi della tua vista testo, cambia il testo in "Normale"

  2. clicca sulla croce per cancellare "wC hR" (rosso sotto)

  3. cambia il testo in "Attribuito", quindi puoi impostare il carattere e le dimensioni del testo.

  4. corri a controllare se funziona



Links