Swift:ScrollView不滚动(如何设置约束)?

时间:2018-01-17 16:09:21

标签: ios swift uiscrollview constraints setcontentview

我试图在我的故事板中设置一个带有自动布局的滚动视图,并在代码中用几个按钮填充它,但滚动视图不滚动,我不明白如何设置约束到滚动可用?

特别是如何将约束设置为内容视图(那是什么?)。

在故事板中,滚动视图位于屏幕的底部(安全区域为20像素),从导向到尾随。它的大小为375x80。

现在在代码中,这是滚动视图如何填充按钮及其设置方式:

override func viewDidLoad() {
    super.viewDidLoad()

    var xCoord: CGFloat = 5
    var yCoord: CGFloat = 5
    let buttonWidth: CGFloat = 70
    let buttonHeight: CGFloat = 70
    let gapBetweenButtons: CGFloat = 5

    var itemCount = 0

    for i in 0..<CIFilterNames.count {
        itemCount = 1

        // Button properties
        let filterButton = UIButton(type: .custom)
        filterButton.frame = CGRect(x: xCoord, y: yCoord, width: buttonWidth, height: buttonHeight)
        filterButton.tag = itemCount
        filterButton.addTarget(self, action: #selector(ViewController.filterButtonTapped(sender:)), for: .touchUpInside)
        filterButton.layer.cornerRadius = 6
        filterButton.clipsToBounds = true

        //Code for filters will be added here

        let ciContext = CIContext(options: nil)
        let coreImage = CIImage(image: originalImage.image!)
        let filter = CIFilter(name: "\(CIFilterNames[i])")
        filter!.setDefaults()
        filter?.setValue(coreImage, forKey: kCIInputImageKey)
        let filteredImageDate = filter!.value(forKey: kCIOutputImageKey) as! CIImage
        let filteredImageRef = ciContext.createCGImage(filteredImageDate, from: filteredImageDate.extent)
        let imageForButton = UIImage(cgImage: filteredImageRef!)

        // Asign filtered image to the button
        filterButton.setBackgroundImage(imageForButton, for: .normal)

        // Add buttons in the scrollView
        xCoord += buttonWidth + gapBetweenButtons
        filterScrollView.addSubview(filterButton)

    }

    filterScrollView.contentSize = CGSize(width: buttonWidth * CGFloat(itemCount + 2), height: yCoord)
    filterScrollView.isScrollEnabled = true


}

根据设备大小显示4或5个按钮,但不能显示,并且无法滚动。

如何使滚动成为可能?

2 个答案:

答案 0 :(得分:0)

原因是在itemCount中,你设置它对itemCount + 2将是3,因为itemCount是for循环的1,所以,将它设置为相等的数组大小

decimal

enter image description here

答案 1 :(得分:0)

使用自动布局而不是计算尺寸会更好 - 为将来的更改提供更大的灵活性。

以下是您可以在Playground页面中运行的示例。我使用&#34;计数&#34;作为按钮标签,因为我没有你的图像。如果您添加图片,则可以取消评论相应的行并移除array([1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009]) 和。.setTitle行:

backgroundColor