首页 > 解决方案 > 以编程方式将视图水平添加到 UIScrollView

问题描述

我正在尝试将三个相同的图像视图堆叠在一起。图像比屏幕大,我希望能够向右滚动,如果我走到最后,就会看到图像重复三遍。这些视图不断堆叠在彼此之上,而不是彼此相邻。我无法弄清楚我做错了什么。任何帮助将不胜感激。

这是我的代码:

func stackThreeImagesHorizontallyToScrollView(imageToStack :UIImage, scrollView: UIScrollView){
           
    var previousAnchor = scrollView.contentLayoutGuide.leadingAnchor

    for i in 0 ..< 3 {
        let imageViewToStack = UIImageView(image: imageToStack)
        
        switch i {
                    case 0:
                        imageViewToStack.backgroundColor = UIColor.green
                        break
                    case 1:
                        imageViewToStack.backgroundColor = UIColor.purple
                        break
                    case 2:
                        imageViewToStack.backgroundColor = UIColor.yellow
                        break

                    default: break

                    }
        
        scrollView.addSubview(imageViewToStack)

        NSLayoutConstraint.activate([
            imageViewToStack.leadingAnchor.constraint(equalTo: previousAnchor, constant: 0),
            imageViewToStack.heightAnchor.constraint(equalToConstant: imageToStack.size.height),
            imageViewToStack.widthAnchor.constraint(equalToConstant: imageToStack.size.width),
            imageViewToStack.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0),
            imageViewToStack.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
            imageViewToStack.trailingAnchor.constraint(equalTo: imageViewToStack.leadingAnchor, constant: imageToStack.size.width)
        ])
        
        previousAnchor = imageViewToStack.trailingAnchor
    }
    
    previousAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: 0).isActive = true
    
}

标签: swiftuiscrollviewconstraints

解决方案


您忘记将translatesAutoresizingMaskIntoConstraints属性设置imageViewToStackfalse

func stackThreeImagesHorizontallyToScrollView(imageToStack: UIImage, scrollView: UIScrollView) {

        var previousAnchor = scrollView.contentLayoutGuide.leadingAnchor

        for i in 0 ..< 3 {
            let imageViewToStack = UIImageView(image: imageToStack)

            /// ADD THIS LINE
            imageViewToStack.translatesAutoresizingMaskIntoConstraints = false

            switch i {
            case 0:
                imageViewToStack.backgroundColor = UIColor.green
                break
            case 1:
                imageViewToStack.backgroundColor = UIColor.purple
                break
            case 2:
                imageViewToStack.backgroundColor = UIColor.yellow
                break

            default: break

            }

            scrollView.addSubview(imageViewToStack)

            NSLayoutConstraint.activate([
                imageViewToStack.leadingAnchor.constraint(equalTo: previousAnchor, constant: 0),
                imageViewToStack.heightAnchor.constraint(equalToConstant: imageToStack.size.height),
                imageViewToStack.widthAnchor.constraint(equalToConstant: imageToStack.size.width),
                imageViewToStack.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0),
                imageViewToStack.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
                imageViewToStack.trailingAnchor.constraint(equalTo: imageViewToStack.leadingAnchor, constant: imageToStack.size.width)
            ])

            previousAnchor = imageViewToStack.trailingAnchor
        }

        previousAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: 0).isActive = true

    }

推荐阅读