UIScrollView的内容大小起始点设置

12

我该如何设置UIScrollView的起始点?我想在UIScrollView左侧添加一个UIImageView,但是只更改contentSize会在scrollview右侧添加滚动空间。我该如何在scrollView的(0,0)点左侧添加一个ImageView并使其成为scrollView内容大小的一部分?


1
你是如何解决那个问题的,也就是出现了额外的空间被添加到右边而不是从左边开始?比如你所提到的情况,从 (-320,0) 开始设置 contentOffset,然后增加 320px 的大小。理想情况下,额外的空间应该被添加到左边而不是右边。我也面临着完全相同的问题,但不同的是我正在进行垂直滚动。请告诉我你是如何解决这个问题的? - Raj Pawan Gumdal
我也添加了一个类似的新问题,因为没有答案,请看看你能否回答它:http://stackoverflow.com/questions/7648492/uiscrollview-setting-proper-contentoffset-for-new-contentsize-yields-undesirabl - Raj Pawan Gumdal
5个回答

9
希望我理解您的意图了。我认为这只需要对contentOffset进行几次调整就可以搞定。
开始:
  • 将scrollView添加到frame(0,0,320,480)-它是一个全屏滚动条
  • 将contentSize设置为(320 * 3, 480)-现在它具有宽度为3个“页面”的内容
  • 将imageView作为子视图添加到scrollView上,frame为(320,0,320,480)
  • 将scrollView的contentOffset设置为(320,0)-这将使scrollView的内容向左移动,向负x方向移动320个像素
  • 现在您的imageView将会显示在屏幕上,但它在滚动条内容的左右两侧均有320像素的宽度。
(请注意,在下面的代码中,我只是添加了一个UIView而不是imageView)
UIScrollView *scroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scroller.delegate = self;
scroller.pagingEnabled = YES;
scroller.backgroundColor = [UIColor blueColor];
scroller.contentSize = CGSizeMake(960, 480);

UIView *imgView = [[UIView alloc] initWithFrame:CGRectMake(320, 0, 320, 480)];
[imgView setBackgroundColor:[UIColor redColor]];
[scroller addSubview:imgView];

[scroller setContentOffset:CGPointMake(320, 0)];
[self.view addSubview:scroller];

这有帮助吗?


我最终自己解决了这个问题,但对于任何遇到这个问题的人,这是我使用的解决方案。感谢您的帮助。 - gurooj
1
还想指出的是,为UIScrollView设置委托非常重要,否则它将无法重新定位视图。 - gurooj

3
实际上,如果您正在使用iPhone并想在滚动条中间开始,请执行以下操作。
[scroller setContentOffset:CGPointMake(320, 0)];
[self.view addSubview:scroller];

同时适用于iPad

[scroller setContentOffset:CGPointMake(1024, 0)];
[self.view addSubview:scroller];

1
尝试设置内容偏移量。
[scrollView setContentOffset:CGPointMake(320, 0.0)];

0

设置起点的关键是将具有不为零的xy坐标的边界分配给它。就像这样

lazy var contentView: UIView = {
    let size = CGFloat(5000)
    let view = UIView(frame: CGRectZero)
    view.frame = CGRectMake(0, 0, size, size)
    view.bounds = CGRectMake(-size/2, -size/2, size, size)
    return view
}()

func centerContent() {
    let frame = UIEdgeInsetsInsetRect(self.scrollView.bounds, self.scrollView.contentInset)
    let navigationBarHeight = self.scrollView.contentInset.top
    let x = (self.scrollView.contentSize.width/2) - (frame.size.width/2)
    let y = (self.scrollView.contentSize.height/2) - (frame.size.height/2) - navigationBarHeight
    self.scrollView.contentOffset = CGPointMake(x, y)
}

0

如果您只是想在开始时设置滚动内容的位置,可以使用- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated方法来将内容滚动到指定的点。

如果这不是您想知道的,请告诉我,我会回复您!

祝好。


我希望我能够让滚动器向左移动而不移动滚动视图。目前,当我更改 contentSize 时,它只会在右侧添加额外的滚动区域,如何在不移动滚动视图本身的情况下向左添加滚动空间? - gurooj
嗨Gurook,为了更好地理解问题;您是否需要以编程方式将scrollview的内容向左移动?当scrollview出现在屏幕上时,您是否需要将scrollview的内容向右偏移(即,在实际可见内容的滚动条左侧有空白空间需要显示)? - Madhu
1
好的,假设您正在将UIView添加为滚动视图的内容,您需要用户查看,只需在将其添加到子视图时设置其框架上的x值即可将其定位在所需位置。例如,如果您将框架设置为CGRect(50,0,320,480); 这将创建一个320x480的图像,位于滚动视图的右侧50个像素。现在左侧将有50px的空白空间。 - Madhu
2
这并不是我真正想要的。在我的情况下,我正在将一个宽度为320像素的ImageView添加到ScrollView的左侧。因此,它将位于(-320,0)。然后,我通过320增加了内容大小。但这只会向右添加滚动大小。如何允许滚动条向左移动到负x方向? - gurooj
Gurooj&@MadhumalGunetileke - 请检查我对上面问题的评论。 - Raj Pawan Gumdal
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接