personalizadas para online importar fuentes fuente font ejemplo descargar como ios swift ios8 xcode6 nsattributedstring

ios - para - fuentes personalizadas online



La cadena atribuida con fuentes personalizadas en el guión gráfico no se carga correctamente (16)

Estamos utilizando fuentes personalizadas en nuestro proyecto. Funciona bien en Xcode 5. En Xcode 6, funciona en texto plano, cadena atribuida en el código. Pero esas cadenas atribuidas establecidas en el guión gráfico vuelven a Helvetica cuando se ejecutan en un simulador o dispositivo, aunque se ven bien en el guión gráfico.

No estoy seguro si es un error de Xcode 6 o iOS 8 SDK, o si la forma de usar fuentes personalizadas se cambia en Xcode 6 / iOS 8.


El mismo problema.

Resuelto: simplemente marque Seleccionable en TextView. Sin esto, tengo la fuente estándar del sistema.


En el caso de una cadena atribuida, puede agregar una fuente personalizada en la lista de fuentes como: haga clic en el icono de fuente, se mostrará el siguiente cuadro de diálogo. diálogo de fuente atribuida

Después de hacer clic en Administrar fuentes , abra la siguiente categoría de diálogo de selección en la que creó o en la existente. Haga clic en + signo para agregar fuente en la categoría. Cuadro de diálogo Administrar fuente


Encontró el mismo problema: la fuente de atributo para UILabel en el guión gráfico no funcionó en tiempo de ejecución. Usar este UIFont + IBCustomFonts.m funciona para mí IBCustomFonts


Estaba tratando de obtener celdas tableView con texto que tenía múltiples párrafos. Las cadenas atribuidas parecían ser una forma de obtener espacio adicional entre los párrafos (algo un poco más bonito que hacer dos avances de línea en la cadena). Encontré esta y otras publicaciones cuando descubrí que la configuración de IB no se aplicaba en el tiempo de ejecución cuando deseaba colocar texto diferente en la celda.

Lo principal que se me ocurrió fue agregar una extensión a String (usando Swift) para crear una cadena atribuida con ciertas características. El ejemplo aquí usa la fuente Marker Felt, ya que es fácilmente distinguible de Helvetica. El ejemplo también muestra un poco más de espacio entre párrafos para hacerlos más distintos entre sí.

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 } }

Luego, en mi tableViewCell personalizado, le envía el texto que desea y lo convierte en una cadena atribuida en el UILabel.

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

En el controlador de vista con tableView, debe registrar su celda en viewDidLoad (): utilicé una punta, así que algo como:

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

Para que la celda descubra qué altura debe tener, haga una celda prototipo que se use para obtener información sobre el tamaño y que nunca se agregue a tableView. Entonces, en las variables de su controlador de vista:

var prototypeSummaryCell : MarkerFeltCell? = nil

Luego, en (probablemente anular, dependiendo de su controlador de vista) 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 { // ...

En el código anterior, el prototypeCell se rellenará la primera vez que sea necesario. Luego, prototypeCell se usa para calcular la altura de la celda después de pasar por el proceso de tamaño automático. Deberá redondear la altura con la función ceil (). También agregué un factor extra de dulce de azúcar.

El bit de código final es cómo configura el texto para la celda. Para este ejemplo, simplemente:

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 } }

Además, aquí hay una foto de la punta. Se fijó la etiqueta a los bordes de la celda (con el margen deseado), pero se utilizó una restricción "Mayor o igual que", con una prioridad menor que "Obligatorio" para la restricción inferior.

Establezca la fuente de la etiqueta en Atribuida. La fuente IB real no importaba.

El resultado en este caso:


Gracias a este hilo, he llegado a esta solución:

private let fontMapping = [ "HelveticaNeue-Medium": "ITCAvantGardePro-Md", "HelveticaNeue": "ITCAvantGardePro-Bk", "HelveticaNeue-Bold": "ITCAvantGardePro-Demi", ] func switchFontFamily(string: NSAttributedString) -> NSAttributedString { var result = NSMutableAttributedString(attributedString: string) string.enumerateAttribute(NSFontAttributeName, inRange: NSRange(location: 0, length: string.length), options: nil) { (font, range, _) in if let font = font as? UIFont { result.removeAttribute(NSFontAttributeName, range: range) result.addAttribute(NSFontAttributeName, value: UIFont(name: fontMapping[font.fontName]!, size: font.pointSize)!, range: range) } } return result }


Haga doble clic e instale la fuente en el sistema. Funcionará (Xcode 8.2)


He tenido problemas con este error: UILabel se muestra correctamente en IB con fuente personalizada pero no se muestra correctamente en el dispositivo o simulador (la fuente se incluye en el proyecto y se usa en UILabels simples).

Finalmente encontré Attributed String Creator en (Mac) App Store. Genera código para colocarlo en su aplicación en el lugar apropiado. Fantástico. No soy el creador, solo un usuario feliz.


La respuesta más simple para la que funcionó es arrastrar las fuentes a FontBook. Si las fuentes están en su proyecto pero no en el FontBook de su computadora, IB a veces tiene problemas para encontrarlo. Extraño, pero me ha funcionado en varias ocasiones.


La solución @Hamidptb funciona, asegúrese de obtener el nombre correcto de la fuente (una vez que la haya agregado al Libro de fuentes)

  • Abra la aplicación Libro de fuentes, navegue hasta su fuente y luego presione Comando + I. El nombre PostScript es el nombre de la fuente que desea usar aquí:

    UILabel.appearance (). Font = UIFont (nombre: " PostScriptName ", tamaño: 17)


La solución para mí fue usar una clase IBDesignable :

import UIKit @IBDesignable class TIFAttributedLabel: UILabel { @IBInspectable var fontSize: CGFloat = 13.0 @IBInspectable var fontFamily: String = "DIN Light" override func awakeFromNib() { var attrString = NSMutableAttributedString(attributedString: self.attributedText) attrString.addAttribute(NSFontAttributeName, value: UIFont(name: self.fontFamily, size: self.fontSize)!, range: NSMakeRange(0, attrString.length)) self.attributedText = attrString } }

Dándole esto en el Creador de interfaces:

Puede configurar su cadena de atributos tal como lo hace normalmente, pero tendrá que configurar su tamaño de fuente y familia de fuentes una vez más en las nuevas propiedades disponibles.

Como Interface Builder está trabajando con la fuente personalizada de forma predeterminada, esto da como resultado lo que ves , lo que prefiero al crear aplicaciones.

Nota

La razón por la que estoy usando esto en lugar de solo la versión simple es porque estoy configurando propiedades en la etiqueta atribuida, como el espacio entre líneas, que no están disponibles cuando se usa el estilo simple.


Mi solución es un poco de trabajo. La solución real es que Apple arregle Interface Builder.

Con él, puede marcar todo el texto en negrita y cursiva en el generador de interfaces utilizando una fuente del sistema, luego, en tiempo de ejecución, renderice su fuente personalizada. Puede no ser óptimo en todos los casos.

NSMutableAttributedString* ApplyCustomFont(NSAttributedString *attributedText, UIFont* boldFont, UIFont* italicFont, UIFont* boldItalicFont, UIFont* regularFont) { NSMutableAttributedString *attrib = [[NSMutableAttributedString alloc] initWithAttributedString:attributedText]; [attrib beginEditing]; [attrib enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attrib.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { if (value) { UIFont *oldFont = (UIFont *)value; NSLog(@"%@",oldFont.fontName); [attrib removeAttribute:NSFontAttributeName range:range]; if([oldFont.fontName rangeOfString:@"BoldItalic"].location != NSNotFound && boldItalicFont != nil) [attrib addAttribute:NSFontAttributeName value:boldItalicFont range:range]; else if([oldFont.fontName rangeOfString:@"Italic"].location != NSNotFound && italicFont != nil) [attrib addAttribute:NSFontAttributeName value:italicFont range:range]; else if([oldFont.fontName rangeOfString:@"Bold"].location != NSNotFound && boldFont != nil) [attrib addAttribute:NSFontAttributeName value:boldFont range:range]; else if(regularFont != nil) [attrib addAttribute:NSFontAttributeName value:regularFont range:range]; } }]; [attrib endEditing]; return attrib; }

Inspirado en esta publicación


Para cualquiera que aplique fuentes personalizadas a una cadena atribuida en el código: intente configurarlo en viewDidLayoutSubviews . Mi error fue hacerlo en viewDidLoad , no se aplicará allí.


Puede agregar fuentes personalizadas al libro de fuentes.

Paso 1 : haga clic en administrar fuentes. Abre el libro de fuentes.

Paso 2 : haga clic en más y agregue sus fuentes.

La próxima vez que haga clic en la fuente con texto atribuido, la fuente recién agregada también aparecerá en la lista. Pero asegúrese de agregar su fuente personalizada en info.plist y recursos de paquete.


Se encontró el mismo problema: la fuente de atributo establecida para TextView en el guión gráfico no funcionaba en tiempo de ejecución con XCode 6.1 y iOS 8 SDK.

Así es como resolví este problema, podría ser una solución para usted:

  1. abra el inspector de atributos de su vista de texto, cambie el texto a "Normal"

  2. haga clic en la cruz para eliminar el "wC hR" (rojo debajo)

  3. cambie el texto a "Atribuido", y luego puede establecer la fuente y el tamaño de su texto.

  4. corre para comprobar si funciona

eso tiene una solución simple y rápida y eso es trabajo en mi caso. esa solución es agregar una línea de código en la función didFinishLaunchingWithOptions en el archivo AppDelegate.swift:

para textViews :

UITextView.appearance().font = UIFont(name: "IranSans", size: 17)

para etiquetas :

UILabel.appearance().font = UIFont(name: "IranSans", size: 17)

y para el resto de UiView como estos dos ☝️


Prueba esto funcionará

En mi caso, cuando trato de configurar "Silversky Technology" como texto atribuido para la etiqueta del generador de interfaces, no se muestra cuando ejecuto en el simulador, pero se muestra en el generador de interfaces. Así que usé un truco, hice la fuente Silversky con 1 píxel más grande que el texto de Tecnología.

El texto del atributo tiene un problema con el mismo tamaño de fuente, así que cambie el tamaño de 1 palabra, esto funciona conmigo.

Puede ser que esto sea un error de xcode, pero este truco me funciona.