2017-09-26 3 views
0

Ich versuche 2 Labels zu setzen, eins unter anderem mit unterschiedlicher Schriftgröße in der Kopfzeile. Die Funktion wird wie folgt aufgerufen:2 Label im Header programmatisch setzen - nicht Label gesehen

viewController.navigationItem.titleView = self.setHeader() 

und Code für die Erzeugung Label:

private func setHeader(agentName: String = "", isTyping: Bool = false) -> UIView { 
    let headerLabel: UILabel = { 
     let label = UILabel() 
     label.text = self.title 
     label.font = UIFont.systemFont(ofSize: 21) 
     label.textColor = UIColor.white 
     return label 
    }() 

    let subheaderLabel: UILabel = { 
     let label = UILabel() 
     label.font = UIFont.systemFont(ofSize: 10) 
     return label 
    }() 

    let headerView: UIView = { 
     let view = UIView() 
     view.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(headerLabel) 
     view.addConstraints([ 
       NSLayoutConstraint(item: headerLabel, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0), 
       NSLayoutConstraint(item: headerLabel, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0), 
       NSLayoutConstraint(item: headerLabel, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16), 
       NSLayoutConstraint(item: headerLabel, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16) 
       ]) 



     return view 
    }() 



    if (!agentName.isEmpty) { 
     if (isTyping) { 
      subheaderLabel.text = agentName + " is typing ..." 
     } else { 
      subheaderLabel.text = agentName 
     } 
     headerView.addSubview(subheaderLabel) 
    } 

    return headerView 
} 

Wenn ich IOS App läuft nichts im Header gezeigt ist. Was ist ein Grund?

Antwort

0

Ich denke, Sie müssen den Rahmen für die HeaderView festlegen. So in der Initialisierungscode für die headerView verwenden initializer mit frame:

let headerView: UIView = { 
    // initialize the view with frame 
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 35)) 
    // you want to call this on the headerLabel, not on view 
    headerLabel.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(headerLabel) 
    view.addConstraints([ 
       NSLayoutConstraint(item: headerLabel, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0), 
       NSLayoutConstraint(item: headerLabel, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0), 
       NSLayoutConstraint(item: headerLabel, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16), 
       NSLayoutConstraint(item: headerLabel, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16) 
      ]) 
     return view 
    }() 

Außerdem glaube ich headerLabel Sie translatesAutoresizingMaskIntoConstraints auf headerLabel statt auf headerView (headerView positioniert ist, durch den Rahmen und nicht Automatische Anordnung) festlegen möchten.

Beachten Sie auch, dass Sie die Ansicht subheaderLabel hinzufügen, aber Sie positionieren es nie, vergessen Sie es auch nicht (obwohl das nur dazu führen sollte subheaderLabel nicht ordnungsgemäß gerendert werden).

+0

Hallo Änderungen anwenden, aber sehe nur ... nicht 2 Label. –

+0

größeren Rahmen verwenden, ist es wahrscheinlich Label minimiert .. und denken Sie daran, Auto-Layout für das zweite Etikett –

+0

@MarceliJanowski einzurichten, wenn die Antwort hilfreich war, bitte akzeptieren Sie es –