将 nil 添加到 tableHeaderView 时无法再次显示

When adding nil to tableHeaderView cant show it again

我已经在Storyboard的TableView中添加了tableHeader,我要hide/show这个header。

我有一个分段控件,希望 header 在其中一个分段中显示。

为了在一个片段中隐藏 header 我使用了:tableView.tableHeaderView = nil 这隐藏了它。 在其他部分,取消隐藏 header 我使用:

if tableView.tableHeaderView == nil {
    tableView.tableHeaderView = self.tableViewHeader
}

但 header 没有再次显示。如何解决?

您可以像这样隐藏和显示 Table Header:

// Show header

tableView.setContentOffset(CGPoint(x: CGFloat(0), y: CGFloat(44)), animated: true)

// Hide header

tableView.setContentOffset(CGPoint(x: CGFloat(0), y: CGFloat(0)), animated: true)

你可以简单地使用

tableView.tableHeaderView.isHidden = true
 if tableView.tableHeaderView.isHidden {
  tableView.tableHeaderView.isHidden = false }

tableView.tableHeaderView.removeFromSuperview

如果你设置

tableView.tableHeaderView == nil

比你创建一个局部变量来存储 tableView.tableHeaderView 在 vi​​ewDidLoad 上这样

self.tableViewHeader = tableView.tableHeaderView

比检查

if tableView.tableHeaderView == nil 
{
 tableView.tableHeaderView = self.tableViewHeader
}

这个很好用

 @IBAction func segmentButtonClicked(_ sender: UISegmentedControl) {
            switch sender.selectedSegmentIndex {
            case 0:
                if demoTableView.tableHeaderView == nil {
                    var view1: UIView = UIView.init(frame: CGRect(x:0,y: 0,width :320,height: 60));
                    var label: UILabel = UILabel.init(frame: CGRect(x:0,y: 0,width :320,height: 60))
                    label.text = "header text"
                    view1.addSubview(label);
                    demoTableView.tableHeaderView = view1
                }
               demoTableView.reload()
            case 1:
                 if demoTableView.tableHeaderView != nil {
                     demoTableView.tableHeaderView = nil
                 }
                demoTableView.reload()
            default:
                break
            }
        }