Странный макет с tabBar.topAnchor

У меня есть несколько подвидов

    view.addSubview(collectionView)
    view.addSubview(pageControl)
    view.addSubview((tabBarController?.tabBar)!)
    view.addSubview(skipButton)
    view.addSubview(nextButton)

и я попытался макет с помощью layoutAnchor. (в это время я привязал pageControl.bottomAnchor к view.bottomAnchor)

   nextButton.anchorWithConstantsToTop(view.topAnchor, left: nil, bottom: nil, right:
        view.rightAnchor, topConstant: 16, leftConstant: 0, bottomConstant: 0, rightConstant: 0)
    nextButtonTopAnchor = nextButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 0)
    nextButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
    nextButton.widthAnchor.constraint(equalToConstant: 60).isActive = true
    skipButton.anchorWithConstantsToTop(view.topAnchor, left: view.leftAnchor, bottom: nil, right: nil, topConstant: 16, leftConstant: 0, bottomConstant: 0, rightConstant: 0)
    skipButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
    skipButton.widthAnchor.constraint(equalToConstant: 60).isActive = true
    pageControl.anchorWithConstantsToTop(nil, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, topConstant: 0, leftConstant: 28, bottomConstant: 0, rightConstant: 30) 

Так что это работает хорошо, и когда я поворачиваю устройство pageControl зажимы в нужном месте

Но если попытаться привязать pageControl.bottomAnchor = tabBarController?.TabBar.topAnchor вместо view.bottomAnchor, то в книжной ориентации все работает нормально, но когда я поворачиваю устройство, происходит что-то раздражающее: pageControl идет вверх

более того, когда я возвращаю альбомную ориентацию формы в портретную, она остается в верхнем положении

Я предполагаю, что проблема лежит в pageControl.bottomAnchor = tabBarController?.TabBar.topAnchor строка, но я могу получить почему? В альбомной ориентации все еще остается tabBar, и pageControl все еще пришлось привязать его к topAnchor tabBar. Пожалуйста, может быть, кто-то знает, что происходит с таким поведением?

1 ответ

Проблема заключается в этой строке:

view.addSubview ((tabBarController?.tabBar)!)

Ты не должен этого делать. Удалите его, а затем установите ограничения после добавления текущего контроллера вида в UITabBarController, Образец кандидата на это будет в первый раз viewWillAppear выполнен.

если ты pageControl создается программно, то вы также должны установить его translatesAutoresizingMaskIntoConstraints собственность на false (как указано в комментариях). Если элемент управления создан в раскадровке, этот шаг не требуется.

Другие вопросы по тегам