6

このテクニカル ノートでは、Apple は、UISCrollView のスーパービューに制約を追加することで、UIScrollView のサブビューを固定/フローティングにできると述べています。私はそれを試しましたが、何か間違ったことをしていて、何が問題なのかわかりません。

スクロール ビューのスーパービューなど、スクロール ビューのサブツリーの外側にあるビューとビューの間に制約を作成することで、スクロール ビューのサブビューを他のスクロール コンテンツの上に浮かんでいる (スクロールしない) ように見せることができることに注意してください。

それが私がしたことです。UIScrollView を既にセットアップしており、次のように固定ビューをスクロールビューの上部に追加しようとしています。

_testOverlay = [[UIView alloc] init];
_testOverlay.backgroundColor = [UIColor blueColor];
_testOverlay.translatesAutoresizingMaskIntoConstraints = NO;
[self.scrollView addSubview:_testOverlay];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_testOverlay]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_testOverlay(64)]-(>=0)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]];

ただし、これは機能しません。追加されたビューはスクロールビューと一緒に移動し、「フローティング」しません。ここで何が問題なのですか?

4

2 に答える 2

6

ビューと、スクロール ビューのスーパービューなど、スクロール ビューのサブツリーの外側のビューとの間。

この部分は重要です。self.scrollViewのスーパービューです_testOverlay。したがって、@"|[_testOverlay]|"縦棒の参照ではself.scrollView. この制約を と の間の制約に置き換える必要があります_testOverlay(私は思います) self.view。ビジュアル フォーマット言語で可能かどうかはわかりませんが、constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant. 次のようになります(コード全体は長すぎるため、投稿しません):

[self.view addConstraint:[NSLayoutConstraint
                          constraintWithItem:self.view
                          attribute:NSLayoutAttributeLeft
                          relatedBy:NSLayoutRelationEqual
                          toItem:_testOverlay
                          attribute:NSLayoutAttributeLeft
                          multiplier:1.0
                          constant:0]];
于 2013-10-09T21:21:48.290 に答える