24

最新のアプリで iOS7 をターゲットにしていますが、ステータス バーをタップしても、tableView または collectionView が一番上にスクロールされないようです。

設定しましたがself.tableView.scrollsToTop = true、まだ何も起こりません。

Apple が iOS7 でステータス バーを大幅に変更したことは知っていますが、これらの変更によってscrollsToTop機能が損なわれたのでしょうか?

アップデート

回答の 1 つのコメントに応えて、コレクション ビューが実際に画面上の唯一の scrollView であることを確認するためにテストしました。

(lldb) po [self.view recursiveDescription]
<UIView: 0x1092ddf0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x109357e0>>
   | <UICollectionView: 0x11351800; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x10966080>; layer = <CALayer: 0x109623a0>; contentOffset: {0, -64}> collection view layout: <UICollectionViewFlowLayout: 0x10940a70>
   |    | <UIImageView: 0x10965fa0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x10965ee0>> - (null)
   |    | <UIImageView: 0x10948f60; frame = (316.5 561; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x10966030>> - (null)

アップデート #2

問題があるかどうかはわかりませんが、navigationBar が透明で、下にスクロールするときにコレクション/tableViews にぼかしを適用する標準の iOS7 NavigationController を使用しています。

アップデート #3

理解した。画面に複数の scrollView があったことがわかりました私のアプリには、アプリのメイン部分の下に左のドロワー メニューがあり、そのメニューにはオプション用の tableView があります。設定するだけself.menuTable.scrollsToTop = falseで、アプリの残りの部分ですべてが期待どおりに機能しました。scrollView Delegate メソッドなどを実装する必要はありませんでした。

4

6 に答える 6

23

画面上に複数のスクロール ビュー/テーブル ビュー/コレクション ビューがありますか? その場合、そのうちの 1 つだけを にscrollsToTop設定できますYES。それ以外の場合、iOS7 はそれらのいずれも上部にスクロールしません。

UIScrollViewDelegate メソッドを実装してscrollViewShouldScrollToTop:、渡されたスクロール ビューが一番上までスクロールしたいビューと等しい場合は YES を返すこともできます。

- (BOOL) scrollViewShouldScrollToTop:(UIScrollView*) scrollView {
    if (scrollView == self.myTableView) {
        return YES;
    } else {
        return NO;
    }
}
于 2013-09-27T21:09:01.967 に答える
11

簡単に言えば、iOS7 と何も変わらないということです。複数の UIScrollView がロードされていない限り、ユーザーがステータス バーをタップすると、tableView または collectionView が一番上までスクロールします。ここのキーはロードされています。別のscrollViewと競合するために、別のscrollViewが必ずしも画面上にある必要はありません。

最近は左右スライド式の引出しが流行っていますが、これが原因でした。ナビゲーション オプションを含むメニューがあり、これらはすべて UITableView によって保持されます。menuTable.scrollsToTop = falseアプリの他の部分で機能させる前に、設定を確認する必要がありました。

于 2013-10-01T04:32:11.073 に答える
7

私の問題は、UITextViewwith が にscrollsToTop設定されていたYESためUITableView、ジェスチャーに反応しなかったことです。要するに、他のすべてのスクロール可能なビューを確認してください。

于 2014-08-06T03:03:13.653 に答える
4

表のセルが動的である場合は、次を削除します。

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
    return YES;
}

次のように新しい関数を作成します。

- (void) disableScrollsToTopPropertyOnAllSubviewsOf:(UIView *)view {
    for (UIView *subview in view.subviews) {
        if ([subview isKindOfClass:[UIScrollView class]]) {
            ((UIScrollView *)subview).scrollsToTop = NO;
        }
        [self disableScrollsToTopPropertyOnAllSubviewsOf:subview];
    }
}

上記の関数を呼び出します- (void)viewDidLoad

[self disableScrollsToTopPropertyOnAllSubviewsOf:self.view];

次のように、テーブル ビューの ScrollsToTop を有効にします。

[myTableView setScrollsToTop:YES];
于 2015-09-03T10:39:56.243 に答える
-2

これは常に私にとってはうまくいきます:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
于 2014-11-19T19:29:02.080 に答える