Con Objective-C, he usado el código que se muestra a continuación para ajustar/cambiar la familia de fuente y el tamaño de un selector de:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel* tView = (UILabel*)view;
if (!tView){
    tView = [[UILabel alloc] init];
    //Setup label properties - frame, font, colors etc
    tView.font = [UIFont fontWithName:@"Times New Roman" size:fontsize];;
}
tView.text = [_mysitedata findKeyForRow:row];
NSLog(@"C key:%@ row:%ld comp:%ld", tView.text, (long int)row, (long int)component);
return tView;
}

Sin embargo, Swift no aceptar un elenco de UIView a UILabel y por lo tanto no puedo seguir este camino, que sería algo como se muestra a continuación:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
    let label = view as! UILabel
    label.font = UIFont(name: "Times New Roman", size: 1.0)
    label.text = pickerData[row]
    return label
}

La primera stament (vamos a la etiqueta ….) throuws una excepción en tiempo de ejecución:

EXC-MALA INSTRUCCIÓN (código=EXC_I386_INVOP, subcódigo=0x0)

Este enlace [link]stackoverflow.com/questions/27455345/… resuelve el problema.

OriginalEl autor Robert Brusa | 2015-11-11

5 Comentarios

  1. 0

    Más idiomáticas Swift codificación sería:

    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
      guard let label = view as? UILabel else {
        preconditionFailure ("Expected a Label")
      }
    
      label.font = UIFont(name: "Times New Roman", size: 1.0)
      label.text = pickerData[row]
      return label
    }
    Para aquellos como yo que tengo un error al tratar de este enfoque, y pasó mucho tiempo tratando de averiguar lo que estaba mal, un enfoque alternativo que hace el trabajo está aquí: stackoverflow.com/questions/27455345/…
    No funciona para mí Subproceso 1: Fatal error: se Esperaba una Etiqueta

    OriginalEl autor GoZoner

  2. 21

    Para Swift 3

     func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let label = (view as? UILabel) ?? UILabel()
    
        label.textColor = .black
        label.textAlignment = .center
        label.font = UIFont(name: "SanFranciscoText-Light", size: 18)
    
        //where data is an Array of String
        label.text = pickerData[row]
    
        return label
      }

    OriginalEl autor Wilson

  3. 6

    Para cambiar el nombre de la fuente y el tamaño que usted puede utilizar viewForRow y un atribuye cadena:

    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
    
        var label = view as! UILabel!
        if label == nil {
            label = UILabel()
        }
    
        var data = pickerData[row]
        let title = NSAttributedString(string: data!, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(36.0, weight: UIFontWeightRegular)])
        label.attributedText = title
        label.textAlignment = .Center
        return label
    
    }

    Y si usted hace su tamaño de fuente más grande que usted querrá aumentar la altura de cada fila con rowHeightForComponent:

    func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
        return 36.0
    }
    También puede reemplazar el primer par de líneas con: dejar label = (vista como? UILabel) ?? UILabel()

    OriginalEl autor John Pavley

  4. 4

    Si desea que el selector de etiquetas para la reducción automática…

    Conjunto adjustsFontSizeToFitWidth=true y minimumScaleFactor=0.5

    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    
        var label: UILabel
        if let view = view as? UILabel { label = view }
        else { label = UILabel() }
    
        label.text = "..."
        label.textAlignment = .center
        label.font = UIFont.boldSystemFont(ofSize: 20)
        label.adjustsFontSizeToFitWidth = true
        label.minimumScaleFactor = 0.5
    
        return label
    }

    OriginalEl autor Derek Soike

  5. 2

    Para swift 2.3

     func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView{
    
            var label = view as! UILabel!
            if label == nil {
                label = UILabel()
            }
    
            label.font = UIFont(name: "Lato-Regular", size: 17)!
            label.text =  dataArray[row] as? String
            label.textAlignment = .Center
            return label
    
        }

    Para Swift 3

    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView{
    
            print("Returning Custom label")
            var label = view as! UILabel!
            if label == nil {
                label = UILabel()
            }
    
            label?.font = UIFont(name: "Lato-Regular", size: 14)!
            label?.text =  dataArray[row] as? String
            label?.textAlignment = .center
            return label!
    
        }

    OriginalEl autor Nischal Hada

Dejar respuesta

Please enter your comment!
Please enter your name here