簡體   English   中英

用UIViews編程填充的UIStackView不在UIScrollView內滾動

[英]UIStackView programmatically filled with UIViews doesn't scroll inside UIScrollView

我還是SO和Swift的新手,所以請耐心等候:-)

我有一個UIViewController

在該viewcontroller內部,有一個UIScrollView

UIScrollView有一個UIStackView (固定在0,0,0,0處的AutoLayout並在垂直和水平方向上居中),並帶有水平軸。

我的目標是將子視圖添加到stackview,並使scrollview水平滾動。

因此,我做了以下工作:

import UIKit

    class ViewController: UIViewController, UIScrollViewDelegate {

        @IBOutlet weak var scroller: UIScrollView!
        @IBOutlet weak var stack: UIStackView!

        override func viewDidLoad() {

            super.viewDidLoad()
            scroller.delegate = self

            for i in 0..<10 {

                let customView = UIView(frame: CGRect(x: 0, y: 0, width: 240, height: 128))
                // .random is unimportant here
                customView.backgroundColor = .random()
                stack.addArrangedSubview(customView)

            }

        }

        override func viewDidLayoutSubviews(){
            self.scroller.contentSize = CGSize(width:2400,height:128)
            print(self.scroller.contentSize) // 2400
            print(self.stack.subviews)
        }

        func scrollViewDidScroll(_ scrollView: UIScrollView) {
            print("scrollin'")
        }


    }

問題是我必須缺少某些東西,因為scrollview根本不滾動。 我只能看到一個視圖(當然,任何時候都可以使用不同的顏色)。

我確定視圖已加載,因為這是第二個打印輸出:

[<UIView: 0x159e01a10; frame = (0 0; 240 128); layer = <CALayer: 0x28115d7a0>>, <UIView: 0x159e03f10; frame = (0 0; 240 128); layer = <CALayer: 0x28115d800>>, <UIView: 0x159e046d0; frame = (0 0; 240 128); layer = <CALayer: 0x28115d960>>, <UIView: 0x159e0e410; frame = (0 0; 240 128); layer = <CALayer: 0x28115da80>>, <UIView: 0x159e0e7c0; frame = (0 0; 240 128); layer = <CALayer: 0x28115db20>>, <UIView: 0x159e0e9a0; frame = (0 0; 240 128); layer = <CALayer: 0x28115da60>>, <UIView: 0x159e0eb80; frame = (0 0; 240 128); layer = <CALayer: 0x28115dbe0>>, <UIView: 0x159e0ed60; frame = (0 0; 240 128); layer = <CALayer: 0x28115dc80>>, <UIView: 0x159e0ef40; frame = (0 0; 240 128); layer = <CALayer: 0x28115dd20>>, <UIView: 0x159e0f120; frame = (0 0; 240 128); layer = <CALayer: 0x28115ddc0>>]

那么,這是怎么回事? 為什么scrollview不滾動?

取代這個

  let customView = UIView(frame: CGRect(x: 0, y: 0, width: 240, height: 128))

let customView = UIView(frame: CGRect(x: CGFloat( i * 240 ) , y: 0, width: 240, height: 128))

我認為不需要stackView,並且

scroller.addSubview(customView)

期待這個滾動條

在此處輸入圖片說明

試試這個代碼,希望對您有所幫助。

override func viewDidLoad() {

    super.viewDidLoad()
    scroller.delegate = self

        for i in 0..<10 {
            let xPosition = 240 * CGFloat(i)
            let customView = UIView(frame: CGRect(x: xPosition, y: 0, width: 240, height: 128))
            // .random is unimportant here
            customView.backgroundColor = .random()
            scroller.addSubview(customView)
        }
    scroller.contentSize.width = 2400
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM