Ширина кадра не совпадает при использовании Horizontal UIScrollView + Orderella PopupDialog - PullRequest
0 голосов
/ 11 марта 2019

Я использую PopupDialog Orderella , чтобы показать горизонтальный вид прокрутки во всплывающем диалоговом окне.

Я программно создал пользовательский вид прокрутки с нумерацией страниц и передал его PopupDialog, однакосодержимое прокрутки имеет большую ширину.

enter image description here

Как видите, хотя текст метки выровнен по центру, онне в центре, так как его ширина шире.Я попытался поиграть с шириной кадра, но не смог выяснить, в чем дело.

Передача пользовательского вида в PopupDialog.Я не устанавливаю предпочитаемую ширину.

    let scrollVC = WalkthroughController()
    // Create the dialog
    let popup = PopupDialog(viewController: scrollVC,
                            buttonAlignment: .horizontal,
                            transitionStyle: .bounceDown,
                            tapGestureDismissal: true,

Класс WalkhowController:

class WalkthroughController: UIViewController, UIScrollViewDelegate {

    var images = ["1","2","3"]
    var walkthroughTexts = ["Welcome!\nakasdfkasd;fjasl;dk", "asdfasdfasdfasdkfhlkj", "asdf;lkjasdl;kfjl;kasdfj;lkasdjflk;sdajflk;asj;l"]

    var frame = CGRect(x: 0, y: 0, width: 0, height: 0)
    let scrollViewHeight: CGFloat = 500
    let pageControlHeight: CGFloat = 30

    lazy var pageControl: UIPageControl = {
        let pc = UIPageControl(frame: CGRect(x: 0, y: scrollViewHeight, width: view.frame.width, height: pageControlHeight))
        pc.currentPageIndicatorTintColor = .red
        pc.pageIndicatorTintColor = .darkGray
        pc.backgroundColor = .white
        pc.numberOfPages = images.count
        return pc
    }()

    lazy var scrollView: UIScrollView = {
        let sv = UIScrollView(frame: CGRect(x: 0, y: 0, width: (view.frame.width), height: scrollViewHeight))
        sv.isPagingEnabled = true
        return sv
    }()

    fileprivate func setupView() {
        view.addSubview(scrollView)
        view.addSubview(pageControl)

        view.heightAnchor.constraint(equalToConstant: (scrollViewHeight+pageControlHeight)).isActive = true

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        setupView()
        for index in 0..<images.count {
            frame.origin.x = scrollView.frame.size.width * CGFloat(index)
            frame.size = scrollView.frame.size
            let wtView = CustomView4WalkThrough(frame: frame)
            wtView.imageView.image = UIImage(named: images[index])
            wtView.label.text = walkthroughTexts[index]
            self.scrollView.addSubview(wtView)
        }
        scrollView.contentSize = CGSize(width: (scrollView.frame.width * CGFloat(images.count)), height: scrollView.frame.height)
        scrollView.delegate = self
    }

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
        pageControl.currentPage = Int(pageNumber)
    }

}

class CustomView4WalkThrough: UIView {

    let label: UILabel = {
        let label = UILabel()
        label.font = UIFont.systemFont(ofSize: 13)
        label.numberOfLines = 0
        label.lineBreakMode = .byWordWrapping
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        label.backgroundColor = .red
        return label
    }()

    let imageView: UIImageView = {
        let imageView = UIImageView()
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.backgroundColor = .yellow
        return imageView
    }()

    func setupLayout() {
        addSubview(imageView)
        addSubview(label)
        NSLayoutConstraint.activate([
            imageView.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor),
            imageView.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor),
            imageView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 10),
            imageView.heightAnchor.constraint(equalToConstant: 400),

            label.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 10),
            label.leadingAnchor.constraint(equalTo: imageView.leadingAnchor),
            label.trailingAnchor.constraint(equalTo: imageView.trailingAnchor),
            label.heightAnchor.constraint(equalToConstant: 100)
            ])
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupLayout()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Я что-то не так делаю в ограничениях автоматического размещения?

Когда WalkthroughController вызывается напрямую, т.е. не вызывается PopupDialog, он работает нормально.

enter image description here

...