【问题标题】:How to edit UIScrollView size?如何编辑 UIScrollView 大小?
【发布时间】:2019-08-11 21:25:58
【问题描述】:

我正在尝试构建这个:

但是,我有这个:

我还没有开始处理背景颜色或更改幻灯片的背景颜色。

我现在的错误是我无法获得正确的尺寸(您可以看出,当我滚动到末尾时,它会在幻灯片 2 处停止)。

如何使框架和幻灯片正确契合? (每张幻灯片是 188 宽和 153 高)。

这是我的代码:

func setupSlideScrollView(slides : [Slide]) {
        scrollView.frame = CGRect(x: 0, y: 0, width: 200, height: 160)
        scrollView.contentSize = CGSize(width: 188 * CGFloat(slides.count), height: 153)
        scrollView.isPagingEnabled = true

        for i in 0 ..< 3 {
            slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: 188, height: 153)
            slides[i].backgroundColor = UIColor.red
            scrollView.addSubview(slides[i])
        }
    }

对于所有代码,我都在关注本教程(除了第 10 步,因为我不需要动画):https://medium.com/@anitaa_1990/create-a-horizontal-paging-uiscrollview-with-uipagecontrol-swift-4-xcode-9-a3dddc845e92

【问题讨论】:

    标签: ios swift xcode uiscrollview


    【解决方案1】:

    你必须在scrollview的width参数中添加两张幻灯片之间的空间。

    在滚动视图中,内容大小是您要添加的内容的总大小。因此,如果两张幻灯片之间有空格,或者如果您有前导和尾随空格,那么您必须在滚动视图的内容大小中添加该总空间。

    例如,如果两张幻灯片之间的间距是10,那么scrollView修改后的内容大小如下。

    scrollView.contentSize = CGSize(width: 188 * CGFloat(slides.count) + CGFloat((slides.count - 1) * 10), height: 153)
    

    【讨论】:

    • 这成功了!谢谢你。我仍然有一个问题......现在每张幻灯片之间的空间太大了。如何只减少边距?
    【解决方案2】:

    您没有为滚动视图内的单元格或票证提供正确的框架。

    var lastCellMaxX: CGFloat = 0
        var constantSpacingBetweenCell: CGFloat = 10
    
        for i in 0 ..< 3 {
            slides[i].frame = CGRect(x: lastCellMaxX, y: 0, width: 188, height: 153)
            slides[i].backgroundColor = UIColor.red
            scrollView.addSubview(slides[i])
            lastCellMaxX += 188 + constantSpacingBetweenCell
        }
    

    我不明白 view.frame 是什么,我认为这对你的情况也没有用。 存储最后一个cellMaxX,即cell.origin.x + cellwidth + spacingBetweenCell, 这将是 x,同时为下一个视图提供框架

    【讨论】:

    • 这解决了一切!谢谢
    • 出于某种原因,我的 pageControl 不再反映我所在的幻灯片。这仍然与使用 view.frame 有关吗?这是我的代码``` func scrollViewDidScroll(_ scrollView: UIScrollView) { let pageIndex = round(scrollView.contentOffset.x/view.frame.width) pageControl.currentPage = Int(pageIndex) } ```
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多