UIScrollView setContentOffset将向子视图添加子视图?

我偶然发现,将一个UIScrollView的setContentOffset会导致scrollView为其子视图添加一个新视图。 这里是代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake((320 - 261) / 2, 50, 261, 67)];
    scrollView.pagingEnabled = YES;
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.bounces = NO;
    scrollView.backgroundColor = [UIColor darkGrayColor];
    for (int i = 0; i < 5; i ++) {
       UIView *view = [[UIView alloc] initWithFrame:CGRectMake(i * 87, 1, 87, 65)];
       view.tag = i;
       UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 50, 30)];
       label.backgroundColor = [UIColor clearColor];
       label.textColor = [UIColor whiteColor];
       label.text = [NSString stringWithFormat:@"%d", i];
       [view addSubview:label];
       view.backgroundColor = [UIColor greenColor];
       [scrollView addSubview:view];
   }
   scrollView.contentSize = CGSizeMake(87 * 5, 67);
   NSLog(@"before scroll: count of subview is %d", scrollView.subviews.count);
   CGPoint offset = CGPointMake(87, 0);
   [scrollView setContentOffset:offset animated:YES];
   NSLog(@"after scroll: count of subview is %d", scrollView.subviews.count);
   [self.view addSubview:scrollView];
}

在调用setContentOffset:offset之前,scrollView的子视图数是5.这就是我所期望的。 之后,数字变成6.是否按设计工作? 如何避免附加新的子视图?


额外的子视图是滚动指示器。 如果您在以后的方法中再次检查,它将会消失。 别担心。

您可以通过隐藏滚动指示器( showsVerticalScrollIndicatorshowsHorizontalScrollIndicator属性)来确认这一点。

不要试图假设UIKit类的视图层次结构。 UIKit可以,也可以将其自己的视图添加到几个方面 - 查看表格及其单元格,导航控制器的视图等。

链接地址: http://www.djcxy.com/p/74383.html

上一篇: UIScrollView setContentOffset will add a subview to the scrollview?

下一篇: ViewWillAppear not working on ScrollView subviews