UIScrollView幻影子视图

我正在从一个nib文件加载视图使用:

NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"AnalysisView" owner:self options:nil]; AnalysisView *gridView = [nibViews objectAtIndex: 0]; 

该笔尖包含一个名为gridScrollView的scrollview,在AnalysisView实现文件中,我有一个方法将视图作为子视图添加到scrollview中:

 for (NSInteger i = [results count] -1; i >= 0; i--) { Result *result = [results objectAtIndex:i]; [self loadResult: result]; } - (void) loadResult: (Result *) result { NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"GridView" owner:self options:nil]; GridView *gridView = [nibViews objectAtIndex: 0]; gridView.tag = self.graphCount; CGRect gridFrame = gridView.frame; CGFloat yOffset = gridFrame.size.height * self.graphCount; gridView.frame = CGRectMake(0, yOffset, gridFrame.size.width, gridFrame.size.height); [self.gridScrollView addSubview: gridView]; self.gridScrollView.contentSize = CGSizeMake(self.gridScrollView.frame.size.width, (yOffset + gridFrame.size.height)); self.graphCount++; } 

我已经将scrollviews委托设置为AnalysisView,并且连接了did end decelaring方法

 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { NSLog(@"%d", [scrollView.subviews count]); } 

当scrollViewDidEndDecelerating方法触发时,报告子视图的数量是5.这些子视图中有3个是我期望的GridViews。 但是有2个UIImageViews,我不知道他们为什么在那里。

这是一个问题,因为我打算在scrollViewDidEndDecelerating方法中使用viewWithTag检索视图,然后在视图上调用一个方法,但是每当我尝试检索标签为0的视图时,我都将检索其中一个UIImageView,这会导致我的应用程序因为该方法无法在图像视图上调用而崩溃。

我知道一个方法是将我的GridViews存储在一个单独的实例数组中,并从那里引用它们。 但我很想知道2 UIImageView是什么,他们是如何到达那里。

默认情况下, UIScrollView包含2个UIImageViews作为滚动指标的子视图。 尽pipe在文档中找不到任何关于滚动指标实现的具体内容,但是这些图像视图存在于类声明中(请参阅UIScrollView.h头文件):

 UIKIT_CLASS_AVAILABLE(2_0) @interface UIScrollView : UIView <NSCoding> { ... UIImageView* _verticalScrollIndicator; UIImageView* _horizontalScrollIndicator; 

您也可以开始分配不是从0,而是从一些正数分配标签 – 这样可以避免与标准子视图相冲突