0

In my viewDidAppear method (in which i call to the super method) I have the following code:

UIScrollView *navbar = [[UIScrollView alloc] init];

[navbar setScrollEnabled:YES];
[navbar setBackgroundColor:[UIColor redColor]];
[navbar setTranslatesAutoresizingMaskIntoConstraints:NO];

[self.view addSubview:navbar];

NSDictionary *viewsDictionary2 = NSDictionaryOfVariableBindings(navbar);

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[navbar]|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:viewsDictionary2]];
 [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[navbar]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:viewsDictionary2]];

NSArray *categories = @[@"nav1", @"nav2", @"nav3", @"nav4", @"nav5", @"nav6", @"nav7", @"nav8", @"nav9", @"nav10", @"nav11", @"nav12", @"nav13"];

NSMutableArray *tempCategoryImages = [NSMutableArray array];

for (NSInteger i = 0; i < categories.count; i++)
{
    [tempCategoryImages insertObject:[UIImage imageNamed:categories[i]] atIndex:i];
}

NSArray *categoryImages = [tempCategoryImages copy];

//          Add subviews.
//
CGFloat xPadding = 25.0f;

UIView *previousImageView = NULL;

for (NSInteger i = 0; i < categoryImages.count; i++)
{
    UIImageView *imageView = [[UIImageView alloc] initWithImage:categoryImages[i]];

    [imageView setTranslatesAutoresizingMaskIntoConstraints:NO];

    [navbar addSubview:imageView];

    if (i == 0) {
        //
        //  First category.
        //
        [navbar addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                                    attribute:NSLayoutAttributeLeft
                                                                    relatedBy:NSLayoutRelationEqual
                                                                       toItem:imageView.superview
                                                                    attribute:NSLayoutAttributeLeft
                                                                   multiplier:1
                                                                     constant:0]];
    } else {
        //
        //  End categories.
        //
        [navbar addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                                    attribute:NSLayoutAttributeLeft
                                                                    relatedBy:NSLayoutRelationEqual
                                                                       toItem:previousImageView
                                                                    attribute:NSLayoutAttributeRight
                                                                   multiplier:1
                                                                     constant:xPadding]];
    }

    [navbar addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                                attribute:NSLayoutAttributeCenterY
                                                                relatedBy:NSLayoutRelationEqual
                                                                   toItem:imageView.superview
                                                                attribute:NSLayoutAttributeCenterY
                                                               multiplier:1
                                                                 constant:0]];

    previousImageView = imageView;
}

//          Set content size.
//
CGSize scrollContentSize = CGSizeZero;

for (NSInteger i = 0; i < categories.count; i++)
{
    UIImage *tempImage = [UIImage imageNamed:categories[i]];

    //  Width.
    //
    scrollContentSize.width += tempImage.size.width;

    //  Height.
    //
    if (tempImage.size.height > scrollContentSize.height) {
        scrollContentSize.height = tempImage.size.height;
    }
}

navbar.contentSize = scrollContentSize;

Which when i log the scrollviews properties, it has the subviews, a large enough content size and scrolling enabled.

Even when I add the UIScrollView to IB and link it to the same code it then works? (I comment out the NSAutoLayout code.

This leads me to believe that for the UIScrollView to work, I cannot use Auto layout.

Am I missing something?

Thanks

EDIT

The code also doesn't work programatically, when I try initWithFrame:frame with setTranslatesAutoresizingMaskIntoConstraints:YES

Adam Carter
  • 4,741
  • 5
  • 42
  • 103

1 Answers1

0

Check the attributes inspector for your scrollview in IB. Make sure that bounce vertically is checked.

Fixed this problem for me.

Steven Marlowe
  • 230
  • 2
  • 16