0

私のviewDidAppearメソッド(スーパーメソッドを呼び出す)には、次のコードがあります。

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;

スクロールビューのプロパティをログに記録すると、サブビュー、十分な大きさのコンテンツサイズ、およびスクロールが有効になります。

UIScrollViewを IBに追加して同じコードにリンクしても、機能しますか? (コードをコメントアウトしNSAutoLayoutます。

これにより、UIScrollView が機能するためには、自動レイアウトを使用できないと思われます。

何か不足していますか?

ありがとう

編集

initWithFrame:フレームを試してみると、コードもプログラムで機能しませんsetTranslatesAutoresizingMaskIntoConstraints:YES

4

1 に答える 1

0

IB でスクロールビューの属性インスペクターを確認してください。垂直方向にバウンスがオンになっていることを確認します。

この問題を修正しました。

于 2013-03-28T19:37:22.260 に答える