2017-07-07 10 views
0

this tutorialの後にユーザーがスクロールすると、ヘッダービューの高さを変更しようとしています。しかし、self.songsTable.headerView(forSection: 0)?.frame.size.heightにアクセスしようとすると(ヘッダービューの高さを更新することができます)、値はゼロになり、デバッガから「ヘッダービューには高さがありません」と表示されます。 heightForHeaderInSectionviewForHeaderInSectionを使用してプログラムでヘッダービューを作成しました。tableView.headerView(forSection:0)の高さはゼロです

コード

class SongsViewController { 
var currentHeaderHeight: CGFloat = 136 

    func scrollViewDidScroll(_ scrollView: UIScrollView) { 
     //Throws error 
     guard let currentHeaderHeight = self.songsTable.headerView(forSection: 0)?.frame.size.height else { 
      print("header view has no height") 
      return 
     } 
    } 

    public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
     return currentHeaderHeight 
    } 

    public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
     let headerView = UIView() 
     headerView.frame = CGRect(x: 0, y: 0, width: Screen.width, height: maxHeaderHeight) 
     return headerView 
    } 
} 
+0

これは完全なコードを表示せずにデバッグするのは少し難しいです。心に浮かぶもの - 現在のHeadHeightは何ですか? 0にすることができますか?セクション(numberOfSections)はありますか?あなたのデバッガは、SongTable.headerView(forSection:0)がnilなので印刷していますか? – cloudcal

+0

@cloudcal私のコードを更新しました。 currentHeaderHeightは136に初期設定されています。 'numberOfSections'は1です。なぜ' songsTable.headerView(forSection:0) 'がnillであるのか分かりません。 – Alex

+0

@Alex、こんにちは、見つけましたか?この無限の問題の理由をアウト? – 0xa6a

答えて

0

これはちょうどあなたのコードスニペットで見つからないことがありますが、あなたはTableViewDataSourceとしてあなたのViewControllerを設定していますか?

class SongsViewController: UIViewController, UITableViewDataSource { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     songsTable.dataSource = self 
    } 

    // ... the rest of your code ... 
} 
+0

yupp私はそれをやった。たぶん私はセクションのヘッダービューを取得するために間違った機能を呼び出していますか? – Alex

関連する問題