问题 设置UIScrollView的内容大小的起点


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


7085
2017-09-06 10:21


起源

你是如何解决这个问题的,你将额外的空间添加到右边而不是从左边开始?比如,你提到的情况是从(-320,0)开始contentOffset并将大小增加320px。理想情况下,额外的空间应该添加到左侧而不是右侧。我也面临着完全相同的问题,但区别在于我正在执行垂直滚动。请告诉我你如何解决这个问题? - Raj Pawan Gumdal
我也添加了类似的新问题,因为没有答案,请看看你是否可以回答: stackoverflow.com/questions/7648492/... - Raj Pawan Gumdal


答案:


希望我有你想要做的事情。我认为这只需要几轮就可以使用contentOffset来实现。

开始;

  • 在框架(0,0,320,480)添加scrollView - 它是一个全屏幕滚动条
  • 将contentSize设置为(320 * 3,480) - 它现在有一个宽度为3'页面'的内容
  • 将您的imageView作为子视图添加到scrollView at frame(320,0,320,480)
  • 将scrollView的contentOffset设置为(320,0) - 这将向左移动scrollView的内容,在负x方向上移动320
  • 现在你的imageView将出现在屏幕上,但在卷轴内容的左右两侧都有320px的宽度。

(请注意,在下面的代码中,我只是添加了一个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];

这有帮助吗?


9
2017-09-07 10:30



我最后自己做了这件事,但对于那些遇到这个问题的人来说,这就是我用过的解决方案。谢谢你的帮助。 - gurooj
还要指出,为UIScrollView设置委托是非常重要的,否则它将不会重新定位视图。 - gurooj


实际上,如果您在iPhone中,应该是在卷轴中间启动的最佳解决方案

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

而对于iPad

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

3
2018-06-14 18:02





尝试设置内容偏移量。

[scrollView setContentOffset:CGPointMake(320, 0.0)];

1
2018-01-27 11:54





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

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

干杯。


0
2017-09-06 10:29



我希望我可以让滚动条向左移动而不移动滚动视图。目前,当我更改contentSize时,它只会在右侧添加额外的滚动区域,如何在不移动滚动视图本身的情况下向左添加滚动房间? - gurooj
嗨Gurook,只是为了更好地理解这个问题;你需要以编程方式移动 内容 滚动视图离开?当滚动视图出现在屏幕上时,您是否需要将滚动视图的内容偏移到右侧(即,您需要显示的实际可见内容左侧的滚动条上有空白区域) - Madhu
我宁愿将scrollview的内容偏移到右边。 - gurooj
好吧,假设您要添加一个UIView作为您需要用户看到的滚动条的内容,只需在将其添加到子视图时在其框架上设置x值就可以将其放置在您需要的位置。例如如果您将帧设置为CGRect(50,0,320,480);这将创建一个320x480图像,位于滚动视图右侧50像素。现在左边将有50px的空白空间。 - Madhu
那不是我想要的。就我而言,我在scrollview的左侧添加了一个宽度为320像素的imageview。所以它将在(-320,0)。然后我将内容大小增加320.但这只会向右添加滚动大小。如何让滚动条向左移动到负x方向? - gurooj


设置起点的关键是分配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
2017-08-03 14:50