したがって、UITableView では、セクションがある場合、セクション ビューは次のセクションがオーバーラップするまで上部に固定され、その後上部に置き換わります。私は基本的にUIScrollViewにUIViewがあり、UIViewのセクションを表し、それが一番上に達したときに同様の効果を持ちたい..そこにとどまり、持ち込まないようにしたい. どうすればいいですか?これは、layoutSubviews または scrollViewDidScroll のいずれかで実行し、UIVIew で操作を行う必要があると思います。
質問する
19605 次
4 に答える
24
UIScrollView で UIView を作成するには、上にスクロールしたときに上部に固定します。
func createHeaderView(_ headerView: UIView?) {
self.headerView = headerView
headerViewInitialY = self.headerView.frame.origin.y
scrollView.addSubview(self.headerView)
scrollView.delegate = self
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let headerFrame = headerView.frame
headerFrame.origin.y = CGFloat(max(headerViewInitialY, scrollView.contentOffset.y))
headerView.frame = headerFrame
}
于 2013-06-27T09:52:08.097 に答える
2
私が正しく思い出せば、2010 WWDC ScrollViewプレゼンテーションでは、他の要素がその周りをスクロールしている間、ビューを固定位置に保つ方法について正確に説明しています。ビデオを見ると、実装するための明確なアプローチが必要です。
これは基本的に、scrollViewDidScrollコールバックに基づいてフレームを更新します(ただし、メモリは細かい点で少しかすんでいます)。
于 2012-06-30T14:29:04.600 に答える
2
Evya のソリューションは非常にうまく機能しますが、Auto Layout を使用する場合は、次のようにする必要があります (Auto Layout 構文はMasonryで記述されていますが、アイデアは理解できます)。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//Make the header view sticky to the top.
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.scrollView.mas_top).with.offset(scrollView.contentOffset.y);
make.left.equalTo(self.scrollView.mas_left);
make.right.equalTo(self.scrollView.mas_right);
make.height.equalTo(@(headerViewHeight));
}];
[self.scrollView bringSubviewToFront:self.headerView];
}
于 2015-03-06T10:16:17.187 に答える