首页 > 解决方案 > Swift SubView 定位到 StoryBoard 项目

问题描述

我有一个视图控制器,其中包含通过情节提要界面添加的 NavBar 项。但是,我以编程方式制作了一个 Collection View,并希望它位于 y 轴上,因此对于任何屏幕尺寸,它始终位于 NavBar 的正下方。我不知道该怎么做,但下面的代码是它现在如何放置在视图控制器中。

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        collectionView?.frame = CGRect(x: 0, y: 64, width: view.frame.size.width, height: 65).integral
    }

标签: iosswiftstoryboardframeviewcontroller

解决方案


如果您将视图控制器嵌入到 a中NavigationController,然后添加UICollectionViewin 代码,将其锚点设置到安全区域(或至少是顶部)将实现您的要求,它甚至会同步集合视图的滚动和拉动导航栏,如果您要在其中放置任何大标题。

另外,我不会在中设置集合视图的框架viewDidLayoutSubviews(),只需在将其添加到其父视图后设置其锚点。

也许是这样的:

view.addSubview(collectionView)
collectionView.translatesAutoresizingMaskIntoConstraints = false
let safeArea = view.safeAreaLayoutGuide
[ 
    collectionView.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor, constant: 0),
    collectionView.topAnchor.constraint(equalTo: safeArea.topAnchor, constant: 0),
    collectionView.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor, constant: 0),
    collectionView.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor, constant: 0)
].forEach { $0.isActive = true }
view.layoutIfNeeded()

推荐阅读