2012-11-29 39 views
0

在我viewDidAppear方法(在我打电话到超级方法),我有以下代码:的UIScrollView不滚动 - 即使有效内容大小和滚动启用

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; 

,当我登录的scrollviews属性,它具有子视图,足够大的内容大小和滚动功能。

即使我将UIScrollView添加到IB并将其链接到相同的代码,它仍然有效? (我注释掉NSAutoLayout代码。

这使我相信,对于UIScrollView的工作,我不能使用自动布局。

我缺少的东西?

感谢

编辑

该代码也不能以编程方式工作,当我尝试initWithFrame:框架setTranslatesAutoresizingMaskIntoConstraints:YES

+0

我还没有完全找到答案,我刚刚重写了我的应用程序,所以我使用IB代替编码。 –

+0

检查链接的示例:http://stackoverflow.com/a/16029013/400544 –

回答

0

检查属性检查器在IB中的滚动视图。确保垂直弹跳被检查。

为我解决了这个问题。