Шрифт TableView Header/Footer в сгруппированной таблице (Swift)
Я изменил tableView с Plain на Grouped так, чтобы верхний / нижний колонтитул не плавал над таблицей и оставался на якоре в верхней и нижней части таблицы. Это было просто, но теперь форматирование шрифта, которое я настроил, не работает. Странно, но все остальные форматирования верхнего / нижнего колонтитула, похоже, работают. Любые мысли о том, что происходит и чего мне не хватает, приветствуются!
Код ниже:
// Setup format of the header
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
let title = UILabel()
title.font = UIFont(name: "Avenir Book", size: 12)
title.textColor = UIColor.whiteColor()
let header: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
header.contentView.backgroundColor = UIColor(red: 30/255, green: 30/255, blue: 50/255, alpha: 1)
header.textLabel!.font = title.font
header.textLabel?.textColor = title.textColor
header.textLabel?.numberOfLines = 0
header.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
header.textLabel?.textAlignment = NSTextAlignment.Center
}
В простой таблице все вышеперечисленное прекрасно работает и выглядит так:
Однако, когда я изменяю на Сгруппированную таблицу, все форматирование, кажется, обнаруживается за исключением стиля шрифта это:
Я озадачен тем, откуда взялись ВСЕ КОПЫ.
Я пытался реализовать решение из этого вопроса / ответа, но так и не смог заставить его работать. Спасибо за ваши идеи!
3 ответа
Предполагая, что вы предоставили строку для заголовка раздела в этом методе:
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
Но в сгруппированном табличном представлении эта строка изменяется на все заглавные буквы. Чтобы удалить все заглавные буквы, попробуйте добавить одну из этих двух строк в методе willDisplayHeaderView:
header.textLabel?.text = header.textLabel!.text!.capitalizedString
header.textLabel?.text = header.textLabel!.text!.lowercaseString
Первый из них будет использовать заглавные буквы в каждом слове, а второй - в нижнем регистре. Если вам не нужен ни один из них, вы можете добавить строку напрямую:
header.textLabel?.text = "Here are a few options for you. Select to learn more"
Swift 4
используйте это делегаты:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let label: UILabel = {
let label = UILabel()
label.textAlignment = .right
label.textColor = .white
label.backgroundColor = .clear
label.font = UIFont.systemFont(ofSize: 20)
return label
}()
return label
}
и не забудьте установить высоту для заголовка:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 70
}
надеюсь, это поможет.
Обновление для >=iOS 14 сUIListContentConfiguration
API:
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
guard let headerView = view as? UITableViewHeaderFooterView else {
return
}
var config = headerView.defaultContentConfiguration()
// This needs to explicitly be set if the table view is Grouped style
// (which it is, to hide sticky backgrounds on section headers),
// as the deafult style for
config.textProperties.transform = .none
// Other properties (color, font) as needed...
// Notably, `ContentConfiguration` requires setting content here as well,
// separate from `titleForHeaderInSection`
config.text = "MyText"
headerView.contentConfiguration = config
headerView.setNeedsUpdateConfiguration()
}