2016-02-23 15 views
6

Sto provando a creare intestazioni di sezione con l'autolayout. Un semplice colpo di testa con un titolo e un contatoreIntestazione della sezione UITableView non visualizzata

class ProfilePeopleListHeaderViewCell: UIView { 

    let titleLeftOffset = 12 
    let counterRightOffset = 5 
    let counterWidth = 50 

    var title = "title" { 
    didSet { 
     titleLabel.text = title 
    } 
    } 
    var numberOfPeople = 0 { 
    didSet { 
     peopleCounter.text = "\(numberOfPeople)" 
    } 
    } 

    let titleLabel = UILabel() 
    let peopleCounter = UILabel() 


    convenience init(title: String, numberOfPeople:Int) { 
    self.init() 
    self.title = title 
    self.numberOfPeople = numberOfPeople 
    backgroundColor = UIColor.greenColor() 
    titleLabel.textColor = Constants.Colors.ThemeGreen 
    titleLabel.textAlignment = .Left 
    if #available(iOS 8.2, *) { 
     titleLabel.font = Constants.Fonts.Profile.PeopleListHeaderFont 
     peopleCounter.font = Constants.Fonts.Profile.PeopleListHeaderFont 
    } else { 
     titleLabel.font = UIFont.systemFontOfSize(14) 
     peopleCounter.font = UIFont.systemFontOfSize(14) 
    } 

    peopleCounter.textAlignment = .Right 
    peopleCounter.textColor = Constants.Colors.ThemeDarkGray 

    addSubview(titleLabel) 
    addSubview(peopleCounter) 
    self.titleLabel.snp_makeConstraints { (make) -> Void in 
     make.centerY.equalTo(self) 
     make.height.equalTo(self) 
     make.width.equalTo(peopleCounter).multipliedBy(3) 
     make.left.equalTo(self).offset(titleLeftOffset) 
    } 

    self.peopleCounter.snp_makeConstraints { (make) -> Void in 
     make.centerY.equalTo(self) 
     make.height.equalTo(self) 
     make.width.equalTo(counterWidth) 
     make.left.equalTo(titleLabel.snp_right) 
     make.right.equalTo(self).offset(counterRightOffset) 
    } 
    } 

} 

Il codice per recuperare l'intestazione è:

let mutualFriendsSectionView = ProfilePeopleListHeaderViewCell(title: Strings.Title.MutualFriends, numberOfPeople: 0) 

    override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    if section == 1 { 
     //mutualFriendsSectionView.layoutSubviews() 
     return mutualFriendsSectionView 
     } 
    } 

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 40 
    } 

ottengo uno sfondo verde nella intestazione di sezione. Ma non vedo alcuna etichetta ...

+0

Sarebbe molto meglio e facile progettare questa cella in IB anziché in codice. – Shripada

+0

Se si dispone di una soluzione per la versione di codice. Sono interessato. Altrimenti, non lo sono. Grazie. – Mikael

+0

hai inserito 'numberOfSectionsInTableView' nel tuo codice? –

risposta

0

In realtà si sta lavorando. il mio errore è stato credere che didSet {} è stato anche chiamato all'interno della classe -> non è il caso.

Quando stavo impostando il titolo in init() non era impostato il testo dell'etichetta.

4
Try this out for UITableView Section Header. 

1. Programatically create headerview 

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
     let headerView = UIView.init(frame: CGRectMake(0, 0, tblView.bounds.size.width, 50)) 
     let lblHeader = UILabel.init(frame: CGRectMake(15, 13, tableView.bounds.size.width - 10, 24)) 
     if section == 0 { 
      lblHeader.text = "Image Settings" 
     } 
     else if section == 1 { 
      lblHeader.text = "Personal Settings" 
     } 
     else { 
      lblHeader.text = "Other Settings" 
     } 
     lblHeader.font = UIFont (name: "OpenSans-Semibold", size: 18) 
     lblHeader.textColor = UIColor.blackColor() 
     headerView.addSubview(lblHeader) 
     headerView.backgroundColor = UIColor(colorLiteralRed: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 1.0) 
     return headerView 
    } 

2. Height for HeaderView 

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
     return 50 
    } 
+0

È possibile utilizzare la funzione di formattazione del codice, per favore? Proverò quindi la tua soluzione :) – Mikael

+0

Ora riesco a vedere l'intestazione della sezione, ma continuo a non capire perché la mia classe ProfilePeopleListHeaderViewCell non funziona ... L'unica differenza che vedo è che stai utilizzando CGRectMake anziché l'autolayout ... – Mikael

0

provare un'istanza tua headerView all'interno metodo viewForHeader

Modificare il codice come di seguito

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

    let mutualFriendsSectionView = ProfilePeopleListHeaderViewCell(title: Strings.Title.MutualFriends, numberOfPeople: 0) 
    if section == 1 
    { 
     //mutualFriendsSectionView.layoutSubviews() 
     return mutualFriendsSectionView 
    } 
} 
+0

Ottengo lo stesso risultato. Uno sfondo verde – Mikael

Problemi correlati