【问题标题】:Laying out images in UIScrollview在 UIScrollview 中布局图像
【发布时间】:2011-05-27 23:07:53
【问题描述】:

我在 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)

【问题讨论】:

  • 你也可以丢失 UIImageView* 声明以及只拥有 for (UIImageView* view in subviews){.......
  • @Matt Scrollbars in UIScrollView 也在 [UIScrollView subviews] 中。

标签: iphone objective-c layout uiscrollview


【解决方案1】:

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

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

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

这行代码

frame.origin = CGPointMake(curXLoc, 0);

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

【讨论】:

  • Matt 我可以给你发一些示例代码吗?
  • 嗨,对不起,我离开了几天,是的,你可以给我发一些示例代码 maffyoo@gmail.com
猜你喜欢
  • 2011-09-23
  • 2011-09-27
  • 2018-12-09
  • 2015-11-30
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多