web-dev-qa-db-ja.com

Swift 2.0でtableviewセルと共にヘッダーセルを移動し続ける方法

テーブルビューの中央でヘッダーを開始し、追加されたtableViewセルで上にスクロールアップして停止できるテーブルビューを作成しようとしています。テーブルビューセルはその「下」でスクロールできます。ヘッダーをテーブルビューの中央に配置しましたが、テーブルビューのセルはその上をスクロールするだけで、ヘッダーは実際には上までスクロールしません。どこにいてもそのままです。リストをスクロールするときにヘッダーを移動させ、リストの上部に到達すると停止し、その後移動するtableViewセルだけにしたい。

XCodeの最新バージョンを使用しています

13
BlueIceSky

ストーリーボードに移動>ビューを選択>テーブルビューを選択>プロパティインスペクター>プレーンからグループ化するCHNAGEスタイル

フッタービューを処理することを忘れないでください。グループ化モードでは、フッターが表示され、背景やその他のプロパティが調整されます。彼らは変わるでしょう。

画像を参照してください: enter image description here

40
Dev_Tandel

セクションを使用してそれを行うことができます。私があなたの質問を正しく理解した場合、あなたがしたいことは、ヘッダーの上にいくつかのセルを持ち、ヘッダーの下にいくつかのセルを持っている間、画面の中央にヘッダーを表示する必要があり、tableViewを上にスクロールすると、ヘッダーがスクロールされるはずです上部に移動し、上部に達したときにヘッダーを上部に維持し、セルをヘッダーの下でスクロールする必要があります。

これを行うには、データソースから2つのセクションを返します

func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
     return 2
}

そして、データソースでは条件付きセルを返します

func tableView(tableView: UITableView, numberOfRowsInSection section:    Int) -> Int
{
    If(section == 1) {
      return <Return number of cell you want to display above header>
    } else {
      return <Return number of cell you want to display below header>
    }
}

次に、デリゲートをオーバーライドします

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
    if(section == 0) {
        return nil //As you do not have to display header in 0th section, return nil
    } else {
        return <Return your header view>

       //You can design your header view inside tableView as you design cell normally, set identifier to it and dequeue cell/headerView as:
       //However this may result in unexpected behavior since this is not how the tableview expects you to use the cells.

        let reuseIdentifier : String!
    reuseIdentifier = String(format: "HeaderCell")

        let headerView = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: NSIndexPath(forRow: 0, inSection: 0))

        return headerView
    }
}

条件付きの高さを

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
    if(section == 0) {
        return 0 
    } else {
        return <Return your header view height>
    }
}

ここでは、いくつかのセルがある2番目のセクションにヘッダーを表示しているため、ヘッダーのないtableViewにいくつかのセルが表示され、このセルの下にいくつかのセルのあるheaderViewが表示され、tableViewを上にスクロールするとheaderViewセルが一番上になるまでスクロールします。

これがお役に立てば幸いです。

1
Bharat Modi