UIScrollView幻像子视图

JFo*_*kes 18 uiscrollview uiimageview ios

我正在使用以下命令从nib文件加载视图:

NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"AnalysisView" owner:self options:nil];
AnalysisView *gridView = [nibViews objectAtIndex: 0];
Run Code Online (Sandbox Code Playgroud)

nib包含一个名为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++;
}
Run Code Online (Sandbox Code Playgroud)

我已将scrollviews委托设置为AnalysisView并连接了do end decelaring方法

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

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

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

我知道一种方法是将我的GridViews存储在一个单独的实例数组中并从那里引用它们.但我很想知道2个UIImageView是什么以及它们是如何实现的.

Vla*_*mir 45

UIScrollView默认情况下,包含2 UIImageViews作为滚动指示器的子视图.虽然我在文档中找不到关于滚动指示符实现的具体内容,但这些imageview存在于类声明中(参见UIScrollView.h标题):

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

您也可以开始分配不是0的标记,而是从某个正数分配标记 - 这样可以避免与标准子视图冲突

  • 可能是的+尝试使用showsHorizo​​ntal/VerticalScrollIndicator属性 - 如果我记得正确设置为NO有效地从scrollview删除指标(但我可能在这里错了) (6认同)