【问题标题】:Set starting point of content size for UIScrollView为 UIScrollView 设置内容大小的起点
【发布时间】:2011-11-11 05:05:21
【问题描述】:

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

【问题讨论】:

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

标签: iphone objective-c ios4 uiscrollview contentsize


【解决方案1】:

尝试设置内容偏移量。

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

【讨论】:

    【解决方案2】:

    设置起点的关键是用不为零的 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)
    }
    

    【讨论】:

      【解决方案3】:

      如果你在 iPhone 上,实际上最好的解决方案是从滚动条的中间开始

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

      对于 iPad

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

      【讨论】:

        【解决方案4】:

        希望我在这里得到了你想要做的事情。我认为这只需使用 contentOffset 转几圈就可以了。

        开始;

        • 在帧 (0,0,320,480) 添加滚动视图 - 它是一个全屏滚动条
        • 将 contentSize 设置为 (320*3, 480) - 现在它的内容宽度为 3 'pages'
        • 将您的 imageView 作为子视图添加到帧 (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];
        

        这有帮助吗?

        【讨论】:

        • 我最终自己做了这个,但对于遇到这个问题的任何人,这是我使用的解决方案。感谢您的帮助。
        • 还想指出,为 UIScrollView 设置委托非常重要,否则它不会重新定位视图。
        【解决方案5】:

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

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

        干杯。

        【讨论】:

        • 我希望我可以让滚动条向左移动而不移动滚动视图。目前,当我更改 contentSize 时,它​​只会在右侧添加额外的滚动区域,如何在不移动滚动视图本身的情况下向左侧添加滚动空间?
        • 嗨 Gurook,只是为了更好地理解这个问题;您是否需要以编程方式将滚动视图的 content 向左移动?当滚动视图出现在屏幕上时,您是否需要将滚动视图的内容向右偏移(即您需要显示的实际可见内容左侧的滚动条上有空白)
        • 我宁愿滚动视图的内容向右偏移。
        • 好吧,假设您正在添加一个 UIView 作为您需要用户查看的滚动条的内容,只需在将其添加到子视图时在其框架上设置 x 值即可定位它你需要它的地方。例如如果将帧设置为 CGRect(50, 0, 320, 480);这将创建一个 320x480 图像,位于滚动视图右侧 50 像素处。现在左边会有 50px 的空白空间。
        • 这不是我真正想要的。就我而言,我在滚动视图的左侧添加了一个宽度为 320 像素的图像视图。所以它将在 (-320,0)。然后我将内容大小增加 320。但这只会增加右侧的滚动大小。如何让滚动条向左移动到负 x 方向?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        • 2018-05-09
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多