UIStackView, программно заполненный UIViews, не прокручивается внутри UIScrollView - PullRequest
0 голосов
/ 08 февраля 2019

Я все еще новичок SO и Swift, поэтому, пожалуйста, будьте терпеливы: -)

У меня есть UIViewController.

Внутри этого viewcontroller есть UIScrollView.

Внутри UIScrollView есть UIStackView (прикреплено с AutoLayout в 0,0,0,0 и по центру по вертикали и горизонтали) с горизонтальной осью.

Моя цельэто добавить подпредставления к просмотру стека и сделать прокрутку прокрутки по горизонтали.

Итак, я сделал следующее:

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'")
        }


    }

Проблема в том, что я должен что-то упустить, потому что представление прокрутки не 'прокручиваю вообще.Я вижу только одно представление (конечно, в любое время с другим цветом).

Я уверен, что представления загружены, потому что это второй вывод на печать:

[<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>>]

Итак, что такоеэто происходит?Почему скроллвью не прокручивается?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

попробуйте этот код, надеюсь, он вам поможет.

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
}
0 голосов
/ 08 февраля 2019

Замените это

  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)

Посмотрите на этот Scroller

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...