Добавление ограничения испортил вид - PullRequest
0 голосов
/ 31 августа 2018

У меня есть вид с UICollectionView и UISegmentedControl.

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

enter image description here

Это мой код:

override func viewDidLoad()
    {
        super.viewDidLoad()

        self.navigationItem.leftBarButtonItem = nil
        self.tabBarController?.tabBar.isHidden = true


        self.SegmentController.setTitle(SegmentAtext, forSegmentAt: 0)
        self.SegmentController.setTitle(SegmentBtext, forSegmentAt: 1)


        self.view.bringSubview(toFront: SegmentController)

        self.LoadProducts(productsToShow: SegmentAtype)
    }

ТАК Я добавляю эту команду:

self.ProductsCollection.topAnchor.constraint(equalTo: SegmentController.bottomAnchor, constant: 10).isActive = true

Но результат хуже:

enter image description here

Теперь контроллер сегмента почти полностью скрыт!

Как мне это исправить?

Edit:

Моя функция viewDidLayoutSubviews:

override func viewDidLayoutSubviews()
    {
        ProductsCollection.translatesAutoresizingMaskIntoConstraints = false
        let topConstraint = NSLayoutConstraint(item: ProductsCollection, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 20)
        let bottomConstraint = NSLayoutConstraint(item: ProductsCollection, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .bottom, multiplier: 1, constant: -50) //leaving space for search field
        let leadingConstraint = NSLayoutConstraint(item: ProductsCollection, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 0)
        let trailingConstraint = NSLayoutConstraint(item: ProductsCollection, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1, constant: 0)

        self.view.addConstraints([topConstraint, bottomConstraint, leadingConstraint, trailingConstraint])
    }

Примечание:

my viewDidLayoutSubviews реализовано в супер-представлении, которое не содержит UISegmentedControl. UISegmentedControl содержится в наследующем представлении.

Редактировать: обновленный вид

enter image description here

1 Ответ

0 голосов
/ 31 августа 2018

Если вы хотите, чтобы UISegmentedControl располагался по центру на экране, а под ним для просмотра вашей коллекции, вы бы сделали

NSLayoutConstraint.activate([
    segmentedControl.topAnchor.constraint(equalTo: view.topAnchor),
    segmentedControl.centerXAnchor.constraint(equalTo: view.centerXAnchor),
    collectionView.topAnchor.constraint(equalTo: segmentedControl.bottomAnchor),
    collectionView.leftAnchor.constraint(equalTo: view.leftAnchor),
    collectionView.rightAnchor.constraint(equalTo: view.rightAnchor),
    collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])

Итак, у нас есть сегментированные элементы управления сверху, чтобы быть верхом вида, и центрировать его, затем верхняя часть представления коллекции - это нижняя часть сегментированного элемента управления (при необходимости можно добавить константу для заполнения), а слева направо и снизу к представлению

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