问题描述
|
我正在UIScrollView中显示许多图像。
我在视图上还有一个按钮,按下该按钮将展开视图,如下所示:
- (IBAction) expandButtonTouched {
NSLog(@\"Expand Button Touched\");
CGRect frame = CGRectMake(0,50,320,410); // New scrollview location
CGRect scrollviewFrame = CGRectMake(0,30,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)
解决方法
您在代码中设置了curXLoc,但从未设置其y位置,除非您修改布局代码以考虑y位置,否则您不能期望调整滚动视图的大小并使它开始将内容推入额外的空间。
我会有一些代码检查可用高度(y),如果有足够的空间,请添加额外的一行。您将需要决定先填充行还是列,因为这会影响项目的显示顺序
从您的代码看来,您似乎想先填充行,因此您需要定义一行中有多少个项目并更改循环代码,以便在新行开始时将x值移回开头...不是自动的方法,甚至您自己的代码也表明您只是在调整x值...
这行代码
frame.origin = CGPointMake(curXLoc,0);
y的字面值为0,您需要添加更多逻辑以决定是否要基于滚动视图的高度调整y值