2016-02-23 18 views
6

私はautolayoutでセクションヘッダーを作成しようとしています。ヘッダを取得するタイトルとカウンタ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 
    } 

Iは、セクションヘッダにおける緑色の背景を取得します。 しかし、私は実際にそれが働いている

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

コードではなくIBでこのセルを設計する方がはるかに簡単で簡単です。 – Shripada

+0

コードバージョンのソリューションがある場合。興味ある。そうでなければ、私はそうではありません。ありがとうございました。 – Mikael

+0

あなたのコードに 'numberOfSectionsInTableView'を入れましたか? –

答えて

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クラスが動作しない理由を理解していない...私が見る唯一の違いは、あなたがautolayoutの代わりにCGRectMakeを使用しているということです... – Mikael

0

がviewForHeaderメソッド内

編集コードをあなたのheaderViewのインスタンスを作成してみてください...任意のラベルが表示されません。 私の間違いは、Set {}がクラス内で呼び出されたと信じることでした - >そうではありません。

私はそれがラベルテキストを設定していませんでしたinit()メソッドにタイトルを設定しました。

+0

私は同じ結果を得ます。緑色の背景。 – Mikael

関連する問題