Шрифт 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 сUIListContentConfigurationAPI:

      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()   
}
Другие вопросы по тегам