UIScrollView - 重复的代码产生不同的结果

时间:2017-10-18 11:42:38

标签: xcode uiscrollview swift4

我有一个小型测试项目,我试图导入我的生产项目。导致问题的ViewController包括背景图像和滚动视图(SV)。

测试SV中出现3张图像,但只有2张图像出现在生产中。似乎应该出现第一张图像的间隙。

请注意。第一个图像是VC的背景图像。我设置它,然后从提供scrollview的数组中删除它。

以下是两个ViewControllers。请注意我将VC嵌入到TabBar和NavBar控制器中进行测试,因为这是我生产的。

enter image description here enter image description here

最令人费解的是代码完全相同。图片网址相同。但是添加到scrollView的UIImageView的数量是不同的。请注意代码中的最后一个print语句:

func setupList() {
        print(foodPairings.count)
        let imageStringURL = foodPairings[0].imageURL
        let encodedURL = imageStringURL.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
        guard let imageURL: URL = URL(string: encodedURL!) else {return}
        bgImage.af_setImage(withURL: imageURL)
        foodPairings.removeFirst()
        print(foodPairings.count)

        print(foodPairings.indices)

        for i in foodPairings.indices {
            let imageView  = UIImageView()
            let imageStringURL = foodPairings[i].imageURL
            let encodedURL = imageStringURL.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
            guard let postURL: URL = URL(string: encodedURL!) else {return}
            imageView.af_setImage(withURL: postURL, placeholderImage: #imageLiteral(resourceName: "Placeholder"), filter: nil, progress: nil, imageTransition: .noTransition, runImageTransitionIfCached: false, completion: nil)
            imageView.tag = i
            imageView.contentMode = .scaleAspectFill
            imageView.isUserInteractionEnabled = true
            imageView.layer.cornerRadius = 20.0
            imageView.layer.masksToBounds = true
            listView.addSubview(imageView)

            //attach tap detector
            imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(didTapImageView)))
        }
        print(listView.subviews.count)
        listView.backgroundColor = UIColor.clear
        positionListItems()
    }

测试结果中的打印语句:

  

4 3   0 ..< 3 4

生产打印以下内容:

  

4 3   0 ..< 3 5

为什么listView.subviews.count在生产中有所不同?

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,但目前尚不清楚问题的根源是什么。

在测试中,我的Scroll View甚至在添加UIImageViews数组之前就有了一个子视图。在生产中,在我添加阵列中的图像之前,Scroll View有两个子视图。

在我添加子视图的循环之前,我从ScrollView中删除所有子视图:

listView.subviews.forEach({ $0.removeFromSuperview() })

        for i in foodPairings.indices {
            print("SubviewCount: \(listView.subviews.count)")

            let imageView  = UIImageView()
...

我的测试和生产Mac都运行XCode 9 Swift 4.为什么子视图计数不同仍然是一个谜。