UITableView中居中节标题标签的问题

时间:2019-03-05 22:30:42

标签: ios uitableview

我试图在UITableView中将节标题标签居中。我正在使用以下代码:

  func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    guard let header = view as? UITableViewHeaderFooterView else { return }
    header.textLabel?.textAlignment = .center
  }

这大部分时间都有效,除了应用首次加载时第一部分标题的标签。它保持对齐。其余的居中。如果我向下滚动然后向上滚动,则第一部分标题标签将居中。如何为初始加载修复此问题?

1 个答案:

答案 0 :(得分:0)

如果您使用

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

您可以通过调用setNeedsLayout()来代替自定义UITableViewHeaderFooterView。

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    guard let header = view as? UITableViewHeaderFooterView else {return}
    header.textLabel?.textAlignment = .center
    header.setNeedsLayout()
}

另一种方式

子类化UITableViewHeaderFooterView并在函数下方使用

func register(_ nib: UINib?, forHeaderFooterViewReuseIdentifier identifier: String)

func register(_ aClass: AnyClass?, forHeaderFooterViewReuseIdentifier identifier: String)
tableView (_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

您可以设置

textLabel.aligment = .center

在子类的构造函数中。