Программно созданный UIPageControl не отображается - PullRequest
0 голосов
/ 04 мая 2020

По моему мнению, у меня есть UIPageViewController (внутри представления контейнера). Под ним находится UIPageControl, а внизу - стековое представление, состоящее из текстового представления и кнопки. Я вижу UIPageViewController и представление стека, но не UIPageControl. Любая идея, что я делаю неправильно:

// Page view controller
        introPageViewC = IntroPageViewC()
        addChild(introPageViewC)

        introPageViewC.view.translatesAutoresizingMaskIntoConstraints = false
        containerView.addSubview(introPageViewC.view)

        NSLayoutConstraint.activate([
            introPageViewC.view.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 0.0),
            introPageViewC.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: 0.0),
            introPageViewC.view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 0.0),
            introPageViewC.view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: 0.0),
            ])

        introPageViewC.didMove(toParent: self)

        // Page view control

        introPageControl.currentPageIndicatorTintColor = UIColor.orange
        introPageControl.pageIndicatorTintColor = UIColor.lightGray.withAlphaComponent(0.8)

        view.addSubview(introPageControl)

        introPageControl.translatesAutoresizingMaskIntoConstraints = false
        introPageControl.topAnchor.constraint(equalTo: containerView.bottomAnchor, constant: 10).isActive = true
        introPageControl.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        // Stack view
        view.addSubview(stackView)
        stackView.axis = .vertical
        stackView.distribution = .fillEqually
        stackView.spacing = 30

        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.topAnchor.constraint(equalTo: introPageControl.bottomAnchor, constant: 10).isActive = true
        stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 40).isActive = true
        stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -40).isActive = true

Ожидаемый результат: enter image description here

Редактировать: Попытка добавления в представление стека :

var allViews = [UIView]()

        // Adding to stackview
        introPageControl.currentPageIndicatorTintColor = UIColor.orange
        introPageControl.pageIndicatorTintColor = UIColor.lightGray.withAlphaComponent(0.8)
        allViews.append(introPageControl)

        nameTextField = UITextField(frame: CGRect(x: 0, y: 0, width: 120, height: 40))
        nameTextField.placeholder = "Mealplan name"
        Utilities.styleTextField(nameTextField)
        nameTextField.setPadding()
        allViews.append(nameTextField)

        let nextButton = UIButton(type: .system)
        nextButton.frame = CGRect(x: 20, y: 20, width: 100, height: 40)
        nextButton.setTitle("Next", for: .normal)
        nextButton.titleLabel?.textColor = .white
        nextButton.titleLabel?.font = UIFont(name: "NexaBold", size: 16)
        Utilities.styleDefaultButton(nextButton)
        nextButton.addTarget(self, action: #selector(tapSubmit(_:)), for: .touchUpInside)
        allViews.append(nextButton)

        errorLabel.frame = CGRect(x: 20, y: 20, width: 100, height: 40)
        errorLabel.font = UIFont(name: "NexaBold", size: 16)
        errorLabel.textColor = .systemRed
        errorLabel.textAlignment = .center
        errorLabel.alpha = 0
        allViews.append(errorLabel)

        for eachView in allViews {
            stackView.addArrangedSubview(eachView)
        }

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я думаю, что вы неправильно закрепили topAnchor. Прямо сейчас, это, кажется, ограничено в нижней части containerView plus 10, который находится рядом с экраном . Я думаю, что вы хотели сказать -10 .

introPageControl.topAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -10).isActive = true
0 голосов
/ 04 мая 2020

introPageControl.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true Я полагаю, вы имели в виду centerXAnchor?

...