Как настроить или удалить размер сгруппированного заголовка tableView - PullRequest
0 голосов
/ 23 октября 2019

У меня есть сгруппированное табличное представление, и оно имеет четыре раздела, я хотел бы уменьшить размер раздела заголовка в некоторых заголовках раздела, и я хотел бы удалить заголовок раздела в других разделах. Я пробовал решения в большинстве вопросов, похожих на мои, но ничего не работает.




     override func viewDidLoad() {
            super.viewDidLoad()

            self.view.backgroundColor = UIColor.white

            tableView.separatorStyle = .none
            tableView.clipsToBounds = true

            self.tableView.sectionHeaderHeight =  UITableView.automaticDimension
            self.tableView.estimatedSectionHeaderHeight = 200

            self.registerTableViewCells()

        }

    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        (view as? UITableViewHeaderFooterView)?.textLabel?.textColor = UIColor.gray

        if section == 0 {
            (view as? UITableViewHeaderFooterView)?.contentView.backgroundColor = UIColor.white
        }
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

        switch section {
        case 0:
            let headerView = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "\(TestHeaderView.self)" ) as! TestHeaderView
            return headerView
        case 1, 2, 3 :
            return nil
        default:
            return nil
        }

    }

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        switch section {
        case 0, 1, 2:
            return nil
        case 3:
            return " some title"
        default:
            return nil
        }
    }

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

        switch section {
        case 0:
            return UITableView.automaticDimension
        case 1:
            return CGFloat(10.0)
        case 2:
            return CGFloat(10.0)
        case 3:
            return CGFloat(43.0)
        default:
            return 0
        }
    }

    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return CGFloat.leastNonzeroMagnitude
    }

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

Я хотел бы, чтобы заголовки разделов tableView имели определенную высоту, как выделено в heightForHeaderInSection .

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Кажется, вы не устанавливаете делегаты dataSource или tableView (если это не происходит в некоторой части кода, которая не показана). Они понадобятся для этого (и для большинства динамических функций просмотра таблиц).

Для верхних и нижних колонтитулов, которые не изменяют размер, достаточно просто создать их - вернуть вид, который вы хотите использовать, из tableView(_:viewForHeaderInSection:) и высоту, которую вы хотите в tableView(_:heightForHeaderInSection:). Задайте для них значения nil и 0 соответственно, чтобы скрыть заголовок.

Простой пример, который предоставляет заголовки разных размеров для разделов 0 и 2, без заголовка для раздела 1 и скрывает все нижние колонтитулы. Я установил цвета фона заголовков, чтобы они выделялись, и не предоставил другие методы, такие как cellForRowAt. Обратите внимание, что высота контролируется методом высоты, а не высотой рамки.

class MyVC1: UIViewController {
   var mapa: MKMapView!
   override func viewDidLoad() {
      super.viewDidLoad()
      title = "Dummy TableView"
      view.backgroundColor = .lightGray
      let tableView = UITableView(frame: CGRect(x:50, y:100, width: 300, height: 680), style: .grouped)
      view.addSubview(tableView)
      tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
      tableView.dataSource = self
      tableView.delegate = self
   }
}

//add dataSource and delegate support
extension MyVC1: UITableViewDelegate, UITableViewDataSource {
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      5
   }

   func numberOfSections(in tableView: UITableView) -> Int {
      3
   }

   func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
      switch section {
      case 0:
         let v = UIView(frame: CGRect(x: 10, y: 10, width: tableView.frame.width - 20, height: 90))
         v.backgroundColor = .purple
         return v
      case 1: return nil
      case 2:
         let v = UIView(frame: CGRect(x: 10, y: 10, width: tableView.frame.width - 20, height: 20))
         v.backgroundColor = .magenta
         return v
      default: fatalError()
      }
   }

   func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
      switch section {
      case 0: return CGFloat(60)
      case 1: return CGFloat(0)
      case 2: return CGFloat(100)
      default: fatalError()
      }
   }

   func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
      nil
   }

   func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
      0
   }


}
0 голосов
/ 23 октября 2019

Вы добавили UITableViewdelegate и UITableViewDataSource?

или попробуйте это self.tableView.estimatedSectionHeaderHeight = 80

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...