2017-01-02 7 views
0

をstackview UIStrollViewを含むUIScrollView)スティッキーヘッダーと私はスティッキーヘッダ(UIImageView)やスクロール部分を(作成しようとしていますスティッキーヘッダは上のアドバイスを聞いて新しいものではないことを知っているが、それでも...</p> <p>

Im UIScrolLViewDelegatescrollViewDidScrollメソッドを使用しています。唯一の問題は、ビューをスクロールするときに、ヘッダビューの高さを減らすだけでなく、スタックビューの内容をスクロールすることです。したがって、さらに上にスクロールすると、ヘッダービューは表示されますが、スクロールビューの一番上のコンテンツはスクロールすると消えます。

これは何とか私がスクロールすると、スタックビューの内容がスクロールアップしていても消えないことがありますか?ヘッダービューが消えると消え始めますか?

ありがとうございました

+0

これはあなたがこれを理解しますか? – shoe

答えて

0

これを行う最も簡単な方法は、テーブルビューを使用することです。スティッキーヘッダーはテーブルの最初のセクションヘッダーで、スクロールする部分は第2セクションです。

何らかの理由でテーブルを使用できない場合は、スクロールビューのコンテンツオフセットを混乱させる必要があります。 contentOffset.yが成長している(ヘッダーの高さを超えていない)場合は、0にリセットし、それに応じてヘッダーの高さを減らします。ヘッダーの高さが0になったら、contentOffsetを押してやり直してください。戻ってくるとcontentOffset.yはネガティブになりたいと思います。

P.S. 2番目のソリューションでは、スクロールビューでバウンスを有効にする必要があります。そうでない場合、ヘッダーは非表示になりますが、コントローラーをリセットしない限り、再度表示されません。

L.E.私の第二の溶液のためのいくつかの(旧)コード:

let headerHeight = self.headerView.height 
self.scrollHandler = { 
    var offset = self.detailsTable.contentOffset 

    self.headerTopConstraint.constant -= offset.y 
    if self.headerTopConstraint.constant < -headerHeight { 
     self.headerTopConstraint.constant = -headerHeight 

     let size = self.detailsTable.contentSize 
     if offset.y + self.detailsTable.frame.height > size.height { 
      offset.y = size.height - self.detailsTable.frame.height 
     } 

     self.detailsTable.contentOffset = offset 
    } 
    else { 
     if self.headerTopConstraint.constant > 0 { 
      self.headerTopConstraint.constant = 0 
     } 
     self.detailsTable.contentOffset = CGPointZero 
    } 
} 

私のコードは、それを隠すために上向きにヘッダを移動していることに注意してください。私が理解している限り、ヘッダーの高さを変更する必要があります(同じ高さで上に移動します)。

+0

しかし、私がscrollViewDidScroll'内にscrollView.contentOffset.yを設定すると、再び呼び出され、オフセットが0にリセットされ、もう一度スクロールできなくなります。 – kalafun

+0

@kalafun私は同様のケースで使用したコードを追加しました。 – DarkByte

+0

明らかに、あなたのスクロールビューは私の場合のテーブルです(detailsTable)。 – DarkByte

関連する問題

 関連する問題