Пытаясь программно добавить UIScrollView в мое приложение, и я продолжаю получать пустое представление - PullRequest
0 голосов
/ 29 января 2020

Попытка создать UIScrollView, и я не могу заставить мои ярлыки отображаться так, как мне хотелось бы, чтобы они находились в мертвой точке.

lazy var label : UILabel = {
        let label = UILabel()
        label.text = "center of container view.center of container view"
        label.font = UIFont(name: "Bebas Neue", size: 23)!
        label.textColor = .black
        return label
    }()
  // Mark: Properties

    lazy var contentViewSize = CGSize(width: self.view.frame.width + 1200, height: self.view.frame.height)

    // Mark: Views
    fileprivate lazy var parentScrollView : UIView = {
        var newView = UIView()

        newView.translatesAutoresizingMaskIntoConstraints = false
        newView.backgroundColor = .black
        newView.frame = self.scrollView.bounds
        newView.frame.size = contentViewSize


        return newView
    }()
    fileprivate lazy var scrollView : UIScrollView = {
        var uiScrollView = UIScrollView(frame: .zero)
        uiScrollView.translatesAutoresizingMaskIntoConstraints = false
        uiScrollView.frame = view.bounds
        uiScrollView.backgroundColor = .gray
        uiScrollView.addViewBorder(borderColor: UIColor.gray.cgColor, borderWith: 10, borderCornerRadius: 0)
//        uiScrollView.alpha =
        uiScrollView.contentSize = contentViewSize
//        uiScrollView.autoresizingMask = .flexibleHeight
        uiScrollView.showsVerticalScrollIndicator = true
        uiScrollView.bounces = true

        return uiScrollView
    }()
    fileprivate lazy var tutorialView : UIStackView = {

        var tutView = UIStackView(arrangedSubviews: [label,label,label])
        tutView.axis = .horizontal
        tutView.backgroundColor = .white
        tutView.distribution = .fillEqually
        tutView.spacing = 0


        return tutView
    }()
    override func viewDidLoad() {

        view.backgroundColor = .white

        view.addSubview(scrollView)
        scrollView.addSubview(parentScrollView)
        parentScrollView.addSubview(tutorialView)

        scrollView.widthAnchor.constraint(equalTo:self.view.widthAnchor,multiplier: 0.9).isActive = true
        scrollView.heightAnchor.constraint(equalTo:self.view.heightAnchor,multiplier: 0.7).isActive = true
        scrollView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 75).isActive = true

        tutorialView.topAnchor.constraint(equalTo: parentScrollView.topAnchor,constant: +10).isActive = true}

Кажется, что когда я добавляю это последнее ограничение с topAnchor, я получаю пустой экран. Когда я снимаю это, я фактически получаю границы между этими двумя представлениями, и я могу сделать некоторую прокрутку. Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Вы должны добавить tutView.translatesAutoresizingMaskIntoConstraints = false при задании ограничений макета при закрытии tutorialView, а также в вашем коде есть некоторые ошибки. Поэтому внесены некоторые изменения в ваш код и проверьте обновленный код:

    lazy var label : UILabel = {
            let label = UILabel()
            label.text = "center of container view.center of container view"
            label.font = UIFont(name: "Bebas Neue", size: 23)!
            label.textColor = .green
            return label
        }()
        // Mark: Properties

        lazy var contentViewSize = CGSize(width: self.view.frame.width + 1200, height: self.view.frame.height)

        // Mark: Views
        fileprivate lazy var parentScrollView : UIView = {
            var newView = UIView()

            newView.translatesAutoresizingMaskIntoConstraints = false
            newView.backgroundColor = UIColor.clear

    //        newView.layer.borderWidth = 2
    //        newView.layer.borderColor = UIColor.yellow.cgColor


            return newView
        }()
        fileprivate lazy var scrollView : UIScrollView = {
            var uiScrollView = UIScrollView()
            uiScrollView.translatesAutoresizingMaskIntoConstraints = false
    //        uiScrollView.frame = view.bounds
            uiScrollView.backgroundColor = .orange
            uiScrollView.layer.borderColor = UIColor.blue.cgColor
            uiScrollView.layer.borderWidth = 2
            uiScrollView.layer.cornerRadius = 0

            //        uiScrollView.alpha =
            uiScrollView.contentSize = contentViewSize
            //        uiScrollView.autoresizingMask = .flexibleHeight
            uiScrollView.showsVerticalScrollIndicator = true
            uiScrollView.bounces = true

            return uiScrollView
        }()
        fileprivate lazy var tutorialView : UIStackView = {

            var tutView = UIStackView(arrangedSubviews: [label,label,label])
            tutView.axis = .horizontal
            tutView.backgroundColor = .red
            tutView.distribution = .fill
            tutView.translatesAutoresizingMaskIntoConstraints = false


            return tutView
        }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white

        view.addSubview(scrollView)
        scrollView.addSubview(parentScrollView)
        parentScrollView.addSubview(tutorialView)

        scrollView.widthAnchor.constraint(equalTo:self.view.widthAnchor,multiplier: 0.9).isActive = true
        scrollView.heightAnchor.constraint(equalTo:self.view.heightAnchor,multiplier: 0.7).isActive = true
        scrollView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 25).isActive = true

        parentScrollView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
        parentScrollView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 10).isActive = true
        parentScrollView.heightAnchor.constraint(equalToConstant: 200).isActive = true
        parentScrollView.widthAnchor.constraint(equalToConstant: 200).isActive = true
//        scrollView.layer.borderWidth = 2
//        scrollView.layer.borderColor = UIColor.blue.cgColor

        tutorialView.heightAnchor.constraint(equalTo: parentScrollView.heightAnchor).isActive = true
        tutorialView.widthAnchor.constraint(equalToConstant: 1200).isActive = true

    }
0 голосов
/ 30 января 2020

Вы задали значение для scrollView?

 uiScrollView.contentSize.width = 1200

Затем присвойте tutorialView такое же ограничение ширины с другими ограничениями.

 NSLayoutConstraint.activate([
     tutorialView.widthAnchor.constraint(equalToConstant: 1200),
     tutorialView.heightAnchor.constraint(equalTo: uiScrollView.heightAnchor)
       ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...