状況: ビューの上部にある種のツールバー (UIToolbar ではなく、カスタム UIView のみ) があります。このツールバーにはいくつかのボタンがあります。そのすぐ下に、フォーム付きのスクロールビューがあります。ツールバーのボタンがタップされると、タップされたボタンに応じて、対応するフォームが右または左から画面にアニメーション表示されます。これでツールバーを動かしたくありません。ただし、ユーザーがスクロール ビューを上下にスクロールすると、ツールバーが上にスクロールするようにします。私が今それを達成した方法は、scrollViewDidScrollデリゲートメソッドにあります(ツールバーのボタンを押すことによるものである場合にのみ、水平スクロールを許可することに注意してください):
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if(scrollView.contentOffset.x != 0 && _shouldScrollHorizontally == NO)
{
CGPoint offset = scrollView.contentOffset;
offset.x = 0;
scrollView.contentOffset = offset;
}
CGRect buttonFrame = [_buttons frame];
buttonFrame.origin.y = -scrollView.contentOffset.y + 10;
[_buttons setFrame:buttonFrame];
}
ただし、これは非効率的であり、遅延が発生することが懸念されます。私が達成しようとしていることを達成するためのより良い方法があるかどうか疑問に思っています。
一日の終わりに、スクロールビューが水平にスクロールされた場合はツールバーを静止したままにし、スクロールビューが垂直にスクロールされた場合はスクロールビューとともに移動するようにします。
ご提案ありがとうございます。