1

ページングが有効になっているUIScrollViewがあります。画像でいっぱいにしたいのですが、を使用せずにフィットさせる必要があるUIImageViewがあります.frame。これは、自動レイアウトが有効になっていると機能しないためです。自動レイアウトを使用しないことはオプションではありません。

現状のコードは次のとおりです。

//Prepare and load the view
[scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), (kScrollObjHeight))];
scrollView1.pagingEnabled = YES;
[scrollView1 setShowsHorizontalScrollIndicator:NO];

CGRect Rect = scrollView1.bounds;
UIImageView *beadContainer;

for (int i = 0; i < imageViews.count; i++)
{
    beadContainer = [imageViews objectAtIndex:i];
    beadContainer.frame = Rect;
    [scrollView1 addSubview:beadContainer];
    Rect.origin.x += Rect.size.width;
}

ScrollViewにはすべての正しいサイズがあり、期待どおりにスクロールしますが、どの画像もそのままでは表示されません。コメントアウトするbeadContainer.frame = Rect;と、配列内のすべての画像がにimageViews表示され0, 0ます。それらはすべて互いに重なり合って表示されます。もちろん、ScrollViewを埋めるためにそれらが必要です。

4

2 に答える 2

2

画像のレイアウトに autolayout を使用しないのはなぜですか?

//Prepare and load the view
[scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), (kScrollObjHeight))];
scrollView1.pagingEnabled = YES;
[scrollView1 setShowsHorizontalScrollIndicator:NO];



UIImageView *firstImage = imageViews[0];
UIImageView *lastImageView = [imageViews lastObject];
UIImageView *previousImageView = nil;
NSMutableArray *constraints = [NSMutableArray new];
for (UIImageView *imageView in imageViews){
    [scrollView1 addSubview:imageView];
    //set the size of the images
    [constraints addObject:[NSLayoutConstraint constraintWithItem:imageView
                                                        attribute:NSLayoutAttributeWidth
                                                        relatedBy:NSLayoutRelationEqual
                                                           toItem:nil
                                                        attribute:NSLayoutAttributeNotAnAttribute
                                                       multiplier:1.0f
                                                         constant:kScrollObjWidth]];
    [constraints addObject:[NSLayoutConstraint constraintWithItem:imageView
                                                        attribute:NSLayoutAttributeHeight
                                                        relatedBy:NSLayoutRelationEqual
                                                           toItem:nil
                                                        attribute:NSLayoutAttributeNotAnAttribute
                                                       multiplier:1.0f
                                                         constant:kScrollObjHeight]];
    //remove autoresizing masks
    [imageView setTranslatesAutoresizingMaskIntoConstraints:NO];
    //pin the top of the imageview to the top of the superview
    [constraints addObjectsFromArray:[NSLayoutConstraint constraintWithVisualFormat:@"V:|[imageView]"
                                                                            options:0
                                                                            metrics:nil
                                                                              views:NSDictionaryOfVariableBindings(imageView)]];

    if ([firstImage isEqual:imageView]){ //pin the first image view to the left of the scrollview
        [constraints addObjectsFromArray:[NSLayoutConstraint constraintWithVisualFormat:@"|[firstImage]"
                                                                                options:0
                                                                                metrics:nil
                                                                                  views:NSDictionaryOfVariableBindings(firstImage)]];
    }

    if (previousImageView){ //pin any imageViews to the previous imageViews
        [constraints addObjectFromArray:[NSLayoutConstraint constraintWithVisualFormat:@"[previousImageView][imageView]"
                                                                               options:0
                                                                               metrics:nil
                                                                                 views:NSDictionaryOfVariableBindings(imageView, previousImageView)]];
    }
    previousImageView = imageView;
}

[scrollView1 addConstraints:constraints];

私はこれを試していないことに注意してください。これはゴミコードかもしれません。テキストエディターで書いたものです。

于 2012-09-27T13:24:09.000 に答える
1

自動レイアウトを完全に使用する場合は、スクロール ビューの を設定しないでくださいcontentSize。コンテンツを制約付きで完全にレイアウトし、すべてのコンテンツ サブビューのサイズと、コンテンツ サブビューを囲む架空の長方形の境界からの距離を必ず記述してください。ランタイムは、その想像上の四角形を自動的に使用して、コンテンツ サイズを作成します。

于 2012-11-26T18:51:35.563 に答える