在UIScrollview中布置图像

时间:2011-05-27 23:07:54

标签: iphone objective-c layout uiscrollview

我在UIScrollView中显示了许多图像。

我在视图上也有一个按钮,按下该按钮会展开视图,如图所示:

- (IBAction) expandButtonTouched {
    NSLog(@"Expand Button Touched");
    CGRect frame = CGRectMake(0, 50, 320, 410); // New scrollview location
    CGRect scrollviewFrame = CGRectMake(0, 30, 320, 380);
    [UIView beginAnimations:@"MoveAndStrech" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationBeginsFromCurrentState:YES];

    self.frame = frame;
    scrollView.frame = scrollviewFrame;

    [self layoutScrollImages];


    [UIView commitAnimations];
}

我的布局图像方法定义如下:

- (void)layoutScrollImages
{
    UIImageView *view = nil;
    NSArray *subviews = [scrollView subviews];

    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;

            curXLoc += (kScrollObjWidth);
        }
    }

    // set the content size so it can be scrollable
    [scrollView setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView bounds].size.height)];
}

问题是,在调整滚动视图大小后,其中的内容不会重新排序。它仍然只显示一行图像,我希望它在这里显示(基于每页9张图像):

1 2 3 | 10 11 12 | 19 20 21
4 5 6 | 13 14 15 | 22 23 24
7 8 9 | 16 17 18 | 25 26 27 (and so on)

1 个答案:

答案 0 :(得分:1)

您在代码中设置curXLoc但从未设置其y位置,您不能期望调整scrollview的大小并开始将内容推入额外空间,除非您修改布局代码以考虑y位置。

我会有一些代码检查可用的高度(y),如果有足够的空间则添加额外的行。您需要先决定是否先填充行或列,因为它会影响项目的显示顺序

从您的代码中看起来您希望首先填充行,因此您需要定义一行中有多少项并更改循环代码,以便在新行开始时将x值移回到开头。没有自动化的方法,即使你自己的代码显示你只是调整x值......

这行代码

frame.origin = CGPointMake(curXLoc, 0);
对于y,

的字面值为0,您需要添加更多逻辑来决定是否根据滚动视图的高度调整y值