UITableView部分标题没有显示

时间:2016-02-23 03:09:36

标签: ios swift uitableview autolayout uitableviewsectionheader

我尝试使用autolayout创建节标题。 带标题和计数器的简单标题

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
    }

我在章节标题中获得了绿色背景。 但我没有看到任何标签......

4 个答案:

答案 0 :(得分:4)

尝试使用UITableView Section Header。

  1. 以编程方式创建标题视图

    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. HeaderView的高度

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

答案 1 :(得分:1)

检查tableView委托是否已连接

答案 2 :(得分:0)

尝试在viewForHeader方法中实例化headerView

编辑您的代码,如下所示

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

答案 3 :(得分:0)

实际上它正在发挥作用。 我的错误是相信didSet {}也在类中被调用 - >事实并非如此。

当我在init()中设置标题时,它没有设置标签文本。