10

subviewsサブクラスで自分を調整しようとしてUIScrollViewいますが、スクロール インジケーターを邪魔したくありません。これらにアクセスするためのパブリック インターフェイスはないようで、ビューがスクロール インジケーターの 1 つであるかどうかを確認したい (無視できるようにするため)。

UIScrollView.h次の 2 つの iVar を宣言します。

UIImageView* _verticalScrollIndicator;
UIImageView* _horizontalScrollIndicator;

...しかし、次のことを試してみたところ、リンカーエラーが発生しました:

for(UIView* v in self.subviews)
{
    // Ignore the scroll-indicator views
    if( (v == _horizontalScrollIndicator) ||
        (v == _verticalScrollIndicator))
    {
        continue;
    }
    // View is one of mine - do stuff to it...
}

Apple は明らかにあなたがこれらをいじることを望んでいません。その場合、返される配列にそれらが含まれないように何か賢いことを行う必要がsubviewsあります (Apple に来てください、それほど難しくありません!)、それまではどうすればそれらを無視できますか? ?

4

6 に答える 6

6

これが私の回避策になりました

BOOL showsVerticalScrollIndicator = self.showsVerticalScrollIndicator;
BOOL showsHorizontalScrollIndicator = self.showsHorizontalScrollIndicator;

self.showsVerticalScrollIndicator = NO;
self.showsHorizontalScrollIndicator = NO;

// loop through self.subviews here

self.showsVerticalScrollIndicator = showsVerticalScrollIndicator;
self.showsHorizontalScrollIndicator = showsHorizontalScrollIndicator;
于 2015-01-13T21:47:42.293 に答える
2

おそらく、あなたはUIScrollView. それらのビューだけの独自の配列を維持してみませんか? そうすれば、UIScrollView の実装における将来の変更に対して安全になります。

于 2012-06-10T01:28:12.230 に答える
0

私の解決策は次のとおりです。

UIView* MYContentView=[[UIView alloc] initWithRect: CGrectMake:(0,0,Scrollview.frame.size.width, scrollview.frame.size.height)];

[ScrollView addsubview: MYContentView];

次に、すべての画像を MYContentView に追加し、後で MYContentView を再スケーリングして

  [ScrollView setContentSize:Cgsize];

これで、スクロールバーを気にせずに MYContentView ですべての画像を列挙できるようになりました。

やっている:

while ([[MYContentView subviews] count]>0) {
    [[[MYContentView subviews]lastObject] removeFromSuperview];
}

画像のみ削除しました。お役に立てれば

于 2015-02-13T11:08:57.027 に答える
0

スクロール インジケーター ビューは、スクロール ビューの有効期間全体にわたって追加および削除されますか? それとも、一度追加され、必要に応じて非表示および表示されるだけですか? 後者の場合は、プライベート ivar を使用する代わりに、それらへの独自の参照を init... に保存し、既に試みたように続行できます。

于 2012-06-23T11:32:22.647 に答える