Swift - как сделать пользовательский заголовок для UITableView?
Мне нужно добавить пользовательский заголовок в таблицу
Я пробую это
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 18))
let label = UILabel(frame: CGRect(x: 20, y: 20, width: 50, height: 50))
label.text = "TEST TEXT"
label.textColor = UIColor.whiteColor()
self.view.addSubview(view)
return view
}
но это не работает, я ничего не вижу на столе
Что я делаю не так? Или, может быть, есть другие способы?
Ответы
Ответ 1
Вы задали высоту заголовка раздела в viewDidLoad?
self.tableView.sectionHeaderHeight = 70
Плюс вы должны заменить
self.view.addSubview(view)
от
view.addSubview(label)
Наконец, вы должны проверить свои рамки
let view = UIView(frame: CGRect.zeroRect)
и в конечном итоге желаемый цвет текста, поскольку он кажется белым на белом фоне.
Ответ 2
Если вы хотите использовать собственный заголовок таблицы в качестве заголовка таблицы, попробуйте следующее:
Обновлено для swift 3.0
Шаг 1
Создайте UITableViewHeaderFooterView для настраиваемого заголовка.
import UIKit
class MapTableHeaderView: UITableViewHeaderFooterView {
@IBOutlet weak var testView: UIView!
}
Шаг 2
Добавить пользовательский заголовок в UITableView
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
//register the header view
let nibName = UINib(nibName: "CustomHeaderView", bundle: nil)
self.tableView.register(nibName, forHeaderFooterViewReuseIdentifier: "CustomHeaderView")
}
extension BranchViewController : UITableViewDelegate{
}
extension BranchViewController : UITableViewDataSource{
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 200
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "CustomHeaderView" ) as! MapTableHeaderView
return headerView
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
// retuen no of rows in sections
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// retuen your custom cells
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
func numberOfSections(in tableView: UITableView) -> Int {
// retuen no of sections
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// retuen height of row
}
}
Ответ 3
Лучшее решение для добавления пользовательского представления заголовка в UITableView для раздела в Swift 4 -
1 Сначала используйте метод ViewForHeaderInSection, как показано ниже -
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: tableView.frame.width, height: 50))
let label = UILabel()
label.frame = CGRect.init(x: 5, y: 5, width: headerView.frame.width-10, height: headerView.frame.height-10)
label.text = "Notification Times"
label.font = UIFont().futuraPTMediumFont(16) // my custom font
label.textColor = UIColor.charcolBlackColour() // my custom colour
headerView.addSubview(label)
return headerView
}
2 Также не забудьте установить Высота заголовка, используя метод UITableView heightForHeaderInSection -
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 50
}
и все готово 🎉 🎉 🎉
Ответ 4
Если вы используете пользовательский элемент как заголовок, добавьте следующее.
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
let headerCell = tableView.dequeueReusableCell(withIdentifier: "customTableCell") as! CustomTableCell
headerView.addSubview(headerCell)
return headerView
}
Если вы хотите иметь простой вид, добавьте следующее.
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView:UIView = UIView()
return headerView
}
Ответ 5
добавьте label
в subview
пользовательского view
, не нужно self.view.addSubview(view)
, потому что viewForHeaderInSection
возвращает UIView
view.addSubview(label)
Ответ 6
Это сработало для меня - Swift 3
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCell(withIdentifier: "customTableCell") as! CustomTableCell
return headerCell
}