我在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)
答案 0 :(得分:1)
您在代码中设置curXLoc但从未设置其y位置,您不能期望调整scrollview的大小并开始将内容推入额外空间,除非您修改布局代码以考虑y位置。
我会有一些代码检查可用的高度(y),如果有足够的空间则添加额外的行。您需要先决定是否先填充行或列,因为它会影响项目的显示顺序
从您的代码中看起来您希望首先填充行,因此您需要定义一行中有多少项并更改循环代码,以便在新行开始时将x值移回到开头。没有自动化的方法,即使你自己的代码显示你只是调整x值......
这行代码
frame.origin = CGPointMake(curXLoc, 0);
对于y,的字面值为0,您需要添加更多逻辑来决定是否根据滚动视图的高度调整y值