UITableView 部分标题未显示
Posted
技术标签:
【中文标题】UITableView 部分标题未显示【英文标题】:UITableView Section Header not showing 【发布时间】:2016-02-23 03:09:35 【问题描述】:我正在尝试使用自动布局制作节标题。 带有标题和计数器的简单标题
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
我在部分标题中看到绿色背景。 但是我没有看到任何标签...
【问题讨论】:
在 IB 中而不是在代码中设计这个单元会更好也更容易。 如果你有代码版的解决方案。我很感兴趣。否则,我不是。谢谢。 您是否在代码中输入了numberOfSectionsInTableView
?
是的。就像: func numberOfSectionsInTableView(tableView: UITableView) -> Int return 3
您的mutualFriendsSectionView
没有通过代码或自动布局约束设置任何框架。这可能是您的标签未显示的原因,因为标签约束与其父视图相关,即mutualFriendsSectionView
。
【参考方案1】:
试试这个 UITableView Section Header。
以编程方式创建标题视图
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
HeaderView 的高度
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
return 50
【讨论】:
请问可以使用代码格式化功能吗?那我试试你的解决方案:) 我现在可以看到部分标题,但我仍然不明白为什么我的 ProfilePeopleListHeaderViewCell 类不起作用...我看到的唯一区别是您使用的是 CGRectMake 而不是自动布局.. .【参考方案2】:检查是否连接了 tableView 委托
【讨论】:
【参考方案3】:实际上它正在工作。 我的错误是相信在类中也调用了 didSet -> 事实并非如此。
当我在 init() 中设置标题时,它没有设置标签文本。
【讨论】:
【参考方案4】:尝试在 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
【讨论】:
我得到了同样的结果。绿色背景。以上是关于UITableView 部分标题未显示的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS8 的 Interface Builder 中向 UITableView 添加静态单元格?内容部分未显示
如何实现(几乎)全视图 uitableview 可以滚动过去最后一个单元格并在 iOS 中显示更多元素
如何在 UITableView 的两个部分之间插入 UIImageView?
使用 NSFetchedRequestController 更新 UITableView 行和部分,而不使用 reloadData