これを行う最も簡単な方法は、テーブルビューを使用することです。スティッキーヘッダーはテーブルの最初のセクションヘッダーで、スクロールする部分は第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
}
}
私のコードは、それを隠すために上向きにヘッダを移動していることに注意してください。私が理解している限り、ヘッダーの高さを変更する必要があります(同じ高さで上に移動します)。
これはあなたがこれを理解しますか? – shoe