添加约束乱搞视图

问题描述 投票:0回答:1

我有一个UICollectionViewUISegmentedControl的视图。

我想更改约束,以便段控制器不会重叠集合视图,如下图所示:

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

现在,分段控制器几乎完全隐藏了!

我该如何解决?

编辑:

我的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])
    }

注意:

我的viewDidLayoutSubviews是在超级视图中实现的,它不包含UISegmentedControlUISegmentedControl包含在继承视图中。

编辑:更新的视图

enter image description here

swift xcode uicollectionview constraints uisegmentedcontrol
1个回答
0
投票

如果您希望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)
        ])

所以我们将分段控件顶部放在视图的顶部,然后将其居中,然后集合视图的顶部是分段控件的底部(如果需要,可以为填充添加常量),并在视图的左下角放置

© www.soinside.com 2019 - 2024. All rights reserved.