2016-02-23 99 views
6

我試圖用自動佈局創建部分標題。 帶有標題和反UITableView部分標題不顯示

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) 
    } 
    } 

} 

檢索標題中的代碼一個簡單的標題是:

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 
    } 

我得到節頭綠色背景。 但我看不出有任何標籤...

+0

在IB中而不是在代碼中設計這個單元格會更好,更容易。 – Shripada

+0

如果您有代碼版本的解決方案。我很感興趣。否則,我不是。謝謝。 – Mikael

+0

你把'numberOfSectionsInTableView'放到你的代碼中了嗎? –

回答

0

其實它的工作。 我的錯誤是相信didSet {}也在類中調用 - >情況並非如此。

當我在init()中設置標題時,它沒有設置標籤文本。

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

您可以使用代碼格式化功能嗎?我會嘗試你的解決方案,然後:) – Mikael

+0

我現在可以看到部分標題,但我仍然不明白爲什麼我的ProfilePeopleListHeaderViewCell類不工作...我看到的唯一區別是,您正在使用CGRectMake而不是自動佈局... – Mikael

0

嘗試實例化您的headerView viewForHeader方法內部

編輯代碼如下

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

我得到了同樣的結果。綠色的背景。 – Mikael