2017-02-20 5 views
0

Ich habe eine Kopfzeile in meiner Tabellenansicht, die ein Bild und ein Label hat. Ich möchte das UII-Bild zentrieren und das Etikett darunter stecken lassen. Das ist mein Code zur Zeit:Programmgesteuert Hinzufügen von Einschränkungen zu einem UITableView-Header

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 

    let headerLabel = UILabel() 
    let logoView = UIImageView() 

    headerLabel.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 21) 
    headerLabel.text = self.navigationItem.title 
    headerLabel.textColor = UIColor.white 
    headerLabel.backgroundColor = UIColor.clear 
    headerLabel.textAlignment = NSTextAlignment.center 

    logoView.frame = CGRect(x: 0, y: 0, width: 90, height: 90) 
    let logo: UIImage = UIImage(named: self.navigationItem.title!)! 
    logoView.image = logo 
    logoView.contentMode = .scaleAspectFill 

    view.addSubview(headerLabel) 
    view.addSubview(logoView) 

    return topView 
} 

Damit liegt das Etikett auf der Oberseite des Kopfes zentriert, und das Logo in der linken oberen Ecke. Wie kann ich Einschränkungen (programmatisch, kein Storyboard) hinzufügen, um das Bild zu zentrieren und die Beschriftung darunter zu pinkeln? Ich habe programmatische Beschränkungen ziemlich ein bisschen benutzt (d. H. something.leftAnchor.constraint(equalTo....), aber ich bin nicht sicher, wie man es in dieser Situation anwendet, da es meine erste Verwendung eines Headers ist.

+0

Haben Sie versucht, eine benutzerdefinierte Ansicht Klasse für Ihre Header Erstellen und Hinzufügen alle Frames/Einschränkungen gibt? Dann laden Sie diese Ansicht in derselben viewForHeaderInSection-Methode? –

+0

Ihr Code macht keinen Sinn. Wenn du 'view.addSubview' sagst, was ist' view'? – matt

Antwort

2

Ich möchte das UIImage zentrieren und das Etikett darunter stecken.

Dies kann erreicht werden, indem die Framing-Logik jeder Teilansicht von den benachbarten Ansichten abhängig gemacht wird. Während dies programmatisch geschieht, muss man bei den geometrischen Berechnungen besonders vorsichtig sein. Dieser Code-Schnipsel sollte es tun

:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 

    let logoView = UIImageView() 

    logoView.frame = CGRect(x: tableView.center.x - 90/2, y: 0, width: 90, height: 90) 
    let logo: UIImage = UIImage(named: self.navigationItem.title!)! 
    logoView.image = logo 
    logoView.contentMode = .scaleAspectFill 

    view.addSubview(logoView) 

    let headerLabel = UILabel() 
    headerLabel.frame = CGRect(x: 0, y: logoView.frame.size.height, width: view.frame.width, height: 21) 
    headerLabel.text = self.navigationItem.title 
    headerLabel.textColor = UIColor.white 
    headerLabel.backgroundColor = UIColor.clear 
    headerLabel.textAlignment = NSTextAlignment.center 

    view.addSubview(headerLabel) 

    return topView 
} 
+0

Sehr nah! Mit Ihrem Code ist das Logo in der Mitte, aber immer noch ganz oben in der Kopfzeile, ich möchte es mehr in der Mitte der Kopfzeile. Und ein wenig Polsterung zwischen der Oberseite des Etiketts und der Unterseite des Logos. Ich werde wahrscheinlich nur die Y-Werte anpassen müssen? – d0xi45

+0

Ok, ich habe gerade 20 zu beiden y-Werten hinzugefügt. Danke vielmals! – d0xi45

+0

froh, das zu hören! – ystack

Verwandte Themen