0

I'm adding subViews to a programmatically added UIScrollView, yet when the subViews go off the screen the scrollview isn't scrolling. Any Ideas?

I need to update the content size of the scrollview more than once.

First I add the scrollView itself as subView of the view, like so:

    [super viewDidLoad];

    [self addScrollView];
   [self APISimpleDemo];

}

#pragma mark Add Scroll View
-(void)addScrollView {

    //Add Scroll View
    CGFloat navHeight = self.navigationController.navigationBar.frame.size.height; //get height of nav bar
    CGRect scrollFrame;
    scrollFrame.size.height = self.view.frame.size.height - (navHeight - 150); //set height minus nav bar and top section
    scrollFrame.size.width = self.view.frame.size.width;
    scrollFrame.origin.y = 180;
    scrollFrame.origin.x = 0;

    self.scrollView = [[UIScrollView alloc] initWithFrame:scrollFrame];
    NSLog(@"TableView Frame %@", NSStringFromCGRect(scrollFrame));
    self.scrollView.delegate = self;
    [self.view addSubview:self.scrollView];

}

The NSLog output is: {{0, 180}, {375, 773}}

Next the code runs through and the end of each test (in this example 2) a tableView is added to the newly added scrollView. Like so...

-(void)addSpeedTable {


    CGRect frame = self.tableView.frame;
    frame.size.height = (40 * resultHeadings.count)+35;
    frame.size.width = self.view.frame.size.width;

    //If more than one table has been shown increase Y axis height for view
    if(tablesDisplayed > 0) {
        NSLog(@"Tables displayed greater than zero");
        viewHeight = viewHeight + frame.size.height;
    }

    frame.origin.y = viewHeight;
    frame.origin.x = 0;



    self.tableView = [[UITableView alloc] initWithFrame:frame];

   [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"newCell"];
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;

    self.tableView.rowHeight = 40;
    self.tableView.sectionFooterHeight = 0;
    self.tableView.sectionHeaderHeight = 22;
    self.tableView.scrollEnabled = NO; // Disable ScrollView


    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView = _tableView;
    NSLog(@"TableView Frame %@", NSStringFromCGRect(frame));

    [self.scrollView addSubview:self.tableView];
    tablesDisplayed++;
}

As I needed the content size of the scrollView to increase as TableViews were added to the ScrollView I created a method that updates the scrollView content size every time a table is added:

The code now looks like:

-(void)addScrollView {

    //Add Scroll View
    CGFloat navHeight = self.navigationController.navigationBar.frame.size.height; //get height of nav bar
    CGRect scrollFrame;
    scrollFrame.size.height = self.view.frame.size.height - navHeight - 150; //set height minus nav bar and top section
    scrollFrame.size.width = self.view.frame.size.width;
    scrollFrame.origin.y = 180;
    scrollFrame.origin.x = 0;

    self.scrollView = [[UIScrollView alloc] initWithFrame:scrollFrame];
    self.scrollView.delegate = self;

    [self.view addSubview:self.scrollView];

}

#pragma mark Update Scroll View Content Size
-(void)updateScrollSize {

//View height is set in the add table method depending on the size of the table
    CGFloat scrollHeight = 400 + viewHeight;

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, scrollHeight);

}

-(void)addSpeedTable {


    CGRect frame = self.tableView.frame;
    frame.size.height = (40 * resultHeadings.count)+50;
    frame.size.width = self.view.frame.size.width;

    //If more than one table has been shown increase Y axis height for view
    if(tablesDisplayed > 0) {
        NSLog(@"Tables displayed greater than zero");
        viewHeight = viewHeight + frame.size.height;
    }

    frame.origin.y = viewHeight;
    frame.origin.x = 0;
    [self updateScrollSize];    //Update scrollView contentSize when adding new table to view


    self.tableView = [[UITableView alloc] initWithFrame:frame];

   [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"newCell"];
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;

    self.tableView.rowHeight = 40;
    self.tableView.sectionFooterHeight = 0;
    self.tableView.sectionHeaderHeight = 22;
    self.tableView.scrollEnabled = NO; // Disable ScrollView


    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView = _tableView;
    NSLog(@"TableView Frame %@", NSStringFromCGRect(frame));

    [self.scrollView addSubview:self.tableView];
    tablesDisplayed++;
}
Dan
  • 2,304
  • 6
  • 42
  • 69

1 Answers1

2

You are not setting scrollView.contentSize.

Stefan Arentz
  • 34,311
  • 8
  • 67
  • 88
  • Thanks, that worked. I have to update the contentSize when new tableViews are added to the view. I've updated the code in my OP with working code. Thanks again – Dan Mar 12 '15 at 19:30