Tengo algunos puntos de vista que se muestran en un controlador de navegación. Dos de estos puntos de vista tienen un título más largo de la barra de navegación.

El problema es que cuando el título es demasiado largo para caber, algunos caracteres se truncan y «…», se añade.

¿Hay alguna manera de que me puede decir la barra de Navegación para cambiar el tamaño del texto del título automáticamente para adaptarse a?

Revise este enlace stackoverflow.com/questions/2422383/… Se le soluciona su problema con suerte.

OriginalEl autor PhoenixDev | 2013-02-19

6 Comentarios

  1. 35

    Utiliza el código de abajo en ViewDidload .

    Objetivo C

    self.title = @"Your TiTle Text";
    UILabel* tlabel=[[UILabel alloc] initWithFrame:CGRectMake(0,0, 200, 40)];
    tlabel.text=self.navigationItem.title;
    tlabel.textColor=[UIColor whiteColor];
    tlabel.font = [UIFont fontWithName:@"Helvetica-Bold" size: 30.0];
    tlabel.backgroundColor =[UIColor clearColor];
    tlabel.adjustsFontSizeToFitWidth=YES;
    tlabel.textAlignment = NSTextAlignmentCenter;
    self.navigationItem.titleView=tlabel;

    Swift Versión

    self.title = "Your TiTle Text"
    let tlabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
    tlabel.text = self.title
    tlabel.textColor = UIColor.whiteColor()
    tlabel.font = UIFont(name: "Helvetica-Bold", size: 30.0)
    tlabel.backgroundColor = UIColor.clearColor()
    tlabel.adjustsFontSizeToFitWidth = true
    tlabel.textAlignment = .center;
    self.navigationItem.titleView = tlabel

    Espero que funcione para usted.Gracias

    gracias a Bob que funcionaba a la perfección!
    usted es Bienvenido!
    Esto añade un nuevo título en la parte superior por encima de la «Gran Título». ahora tengo dos títulos…

    OriginalEl autor jamil

  2. 9

    Swift versión de Aceptado Responder a + poner el texto de la etiqueta en el centro :

    Swift 2.3:

        self.title = "Your TiTle Text"
        let tlabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
        tlabel.text = self.title
        tlabel.textColor = UIColor.whiteColor()
        tlabel.font = UIFont.boldSystemFontOfSize(17) //UIFont(name: "Helvetica", size: 17.0)
        tlabel.backgroundColor = UIColor.clearColor()
        tlabel.adjustsFontSizeToFitWidth = true
        tlabel.textAlignment = .Center
        self.navigationItem.titleView = tlabel

    Y Swift 3 :

        self.title = "Your TiTle Text"
        let frame = CGRect(x: 0, y: 0, width: 200, height: 40)
        let tlabel = UILabel(frame: frame)
        tlabel.text = self.title
        tlabel.textColor = UIColor.white
        tlabel.font = UIFont.boldSystemFont(ofSize: 17) //UIFont(name: "Helvetica", size: 17.0)
        tlabel.backgroundColor = UIColor.clear
        tlabel.adjustsFontSizeToFitWidth = true
        tlabel.textAlignment = .center
        self.navigationItem.titleView = tlabel

    OriginalEl autor Unit Testing

  3. 1

    Ninguna de las soluciones anteriores de costura para trabajar de forma fiable para mí.
    Sin embargo, he encontrado una solución mediante el uso de diferentes elementos de la proporciona respuestas, en su Swift 2 y es muy elegante, ya que no requiere ningún código personalizado cada vez que cambie la etiqueta, que sólo utiliza la propiedad de los observadores en el título.

    Nota que en mi caso, yo tenía un botón atrás en la parte izquierda de la barra de navegación, que coloca el texto en el centro de la pantalla, para solucionar esto yo estoy usando atribuye el texto y la tailIndent. Todos los comentarios/información en el siguiente código :

    class VCHowToTopic : UIViewController {
    
    
        //add handlers so that any manipulation of the title is caught and transferred to the custom drawn UILabel
        override var title : String? {
            set {
                super.title = newValue
                configureTitleView()
            }
            get {
                return super.title
            }
        }
    
        //MARK: - lifecycle
    
    
        func configureTitleView() {
            //some large number that makes the navigationbar schrink down our view when added
            let someVeryLargeNumber = CGFloat(4096)
            //create our label
            let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: someVeryLargeNumber, height: someVeryLargeNumber))
            //0 means unlimited number of lines
            titleLabel.numberOfLines = 0
            //define style of the text (we will be using attributed text)
            let style = NSMutableParagraphStyle()
            style.alignment = .Center
            //top compensate for the backbutton which moves the centered text to the right side of the screen
            //we introduce a negative tail indent, the number of 56 has been experimentally defined and might
            //depend on the size of your custom back button (if you have one), mine is 22x22 px
            style.tailIndent = -56
            //create attributed text also with the right color
            let attrText = NSAttributedString(string: title!, attributes: [NSParagraphStyleAttributeName : style,
                NSForegroundColorAttributeName : UIColor.whiteColor()])
            //configure the label to use the attributed text
            titleLabel.attributedText = attrText
            //add it as the titleview
            navigationItem.titleView = titleLabel
        }
    
    
    }
    CGRect(x: 0, y: 0, width: someVeryLargeNumber, height: someVeryLargeNumber) es la clave para hacer que la vista visible en el Título

    OriginalEl autor HixField

  4. 1

    En caso de que usted tiene una vista agregado en titleView, y usted desea cambiar el tamaño de la vista, usted puede utilizar este código (Swift 3):

    self.translatesAutoresizingMaskIntoConstraints = false
    self.layoutIfNeeded()
    self.sizeToFit()
    self.translatesAutoresizingMaskIntoConstraints = true

    OriginalEl autor Paolo Musolino

  5. 0

    usted necesita para personalizar la navegación de la barra de título de la vista con uilabel y proporcionar ajustar el tamaño de letra..

        [self.navigationItem setTitleView:<"Include any UI View subclass">];

    OriginalEl autor Madhu

  6. -1

    He aquí un ejemplo en Swift que, además, permite múltiples líneas. El uso de PureLayout para simplificar el diseño automático.

    override func viewDidLoad() {
      super.viewDidLoad()
      configureTitleView()
    }
    
    func configureTitleView() {
      let titleLabel = UILabel()
      titleLabel.numberOfLines = 0
      titleLabel.textAlignment = .Center
      titleLabel.font = UIFont.boldSystemFontOfSize(17.0)
      titleLabel.text = searchLoc.mapItem.name
      navigationItem.titleView = titleLabel
      titleLabel.autoPinEdgesToSuperviewMargins() //PureLayout method
      titleLabel.adjustsFontSizeToFitWidth = true
    }

    Y un ejemplo de uso:

    Cómo cambiar el tamaño de Título en la barra de navegación de forma dinámica

    no de costura para trabajar porque cuando la titleLabel.autoPinEdgesToSuperviewMargins se llama, el superview de la titleLabel es (todavía) nil y de esta manera establecer las limitaciones que afirma. (xcode 7.3, IOS9)

    OriginalEl autor Scott Gardner

Dejar respuesta

Please enter your comment!
Please enter your name here