Swift滚动视图最后一项为空

时间:2018-06-03 07:36:53

标签: ios swift uiscrollview

我目前正在学习swift,我有一个项目,我必须使用滚动视图显示三个图像,但问题是当我滚动三个图像时,滚动视图继续进行我怎么才能滚动那边的图像。 这是我的代码

import UIKit

class ViewController: UIViewController {

    var images = [UIImageView]()
    var contentWidth: CGFloat = 0.0

    @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()


        for x in 0...2 {
            let image = UIImage(named: "icon\(x).png")
            let imageView = UIImageView(image: image)
            images.append(imageView)

            var newX: CGFloat = 0.0
            newX = view.frame.midX + view.frame.size.width * CGFloat(x)

            contentWidth += newX

            scrollView.addSubview(imageView)

            imageView.frame = CGRect(x: newX - 75, y: (view.frame.size.height / 2) - 75, width: 150, height: 150)

        }

        scrollView.contentSize = CGSize(width: contentWidth, height: view.frame.size.height)

    }

}

这里看起来如何 -

第一个图像项目 -

first image item

第二个图像项目 -

second image item

第三个图像项目 -

third image item

不应出现的第四项 -

fourth item which is not supposed to appear

1 个答案:

答案 0 :(得分:0)

您的代码有几个问题:

  1. 调用view时未正确确定viewDidLoad()的大小。将代码移至override viewDidLayoutSubviews,以确保您拥有正确的视图大小。但请注意,该例程将被多次调用,因此如果您已添加内容以阻止设置{Boolean,请使用contentAdded(名称为scrollView)来跟踪{1}}不止一次。

  2. 您正在以错误的金额递增contentWidth。每次循环时,您只希望contentWidth的宽度扩展view

  3. 以下是更新后的代码:

    var contentAdded = false
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    
        if !contentAdded {
            contentAdded = true
    
            for x in 0...2 {
                let image = UIImage(named: "icon\(x).png")
                let imageView = UIImageView(image: image)
                images.append(imageView)
    
                var newX: CGFloat = 0.0
                newX = view.frame.midX + view.frame.size.width * CGFloat(x)
    
                contentWidth += view.frame.size.width
    
                scrollView.addSubview(imageView)
    
                imageView.frame = CGRect(x: newX - 75, y: (view.frame.size.height / 2) - 75, width: 150, height: 150)
    
            }
    
            scrollView.contentSize = CGSize(width: contentWidth, height: view.frame.size.height)
        }
    }
    

    注意:您假设scrollViewwidth具有相同的heightview,但这可能并非总是如此如果您以不同方式布局屏幕的情况。使用scrollView.bounds代替view.frame更为正确,这样即使您的scrollView小于屏幕,也可以获得预期的结果。