代码之家  ›  专栏  ›  技术社区  ›  Ofri

添加约束混乱视图

  •  0
  • Ofri  · 技术社区  · 6 年前

    我有一个有着广阔前景的视野 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

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

    我该如何解决这个问题?

    My 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 在超级视图中实现,该视图不包含 UISegmentedControl . 这个 包含在继承视图中。

    编辑:更新的视图

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ladislav    6 年前

    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)
            ])
    

    因此,我们将分段控件置于视图顶部,并将其居中, 然后,集合视图的顶部是分段控件的底部(如果需要,您可以添加一个用于填充的常量)以及视图的左右和底部