ios - 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
}
解决方案
如果您将视图控制器嵌入到 a中NavigationController
,然后添加UICollectionView
in 代码,将其锚点设置到安全区域(或至少是顶部)将实现您的要求,它甚至会同步集合视图的滚动和拉动导航栏,如果您要在其中放置任何大标题。
另外,我不会在中设置集合视图的框架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()
推荐阅读
- android - 当我根据用户类型有两种类型的活动时,我可以使用共享首选项在 android studio 中创建登录会话吗?
- visual-studio-code - 同时调试两个 VSCode 扩展?
- android - Fragment 未附加到 FragmentManager
- python - 开箱**kwargs
- python - 如何从 python 为电子应用程序创建数据库
- javascript - 用户触发的“点击”事件的回调执行与以编程方式触发的回调有什么区别?
- go - 如何为网络、存储和计算编写 GCP 云 API 实现
- angular - 如何测试 SonarQube 以了解它在 Spring Boot 应用程序中捕获安全问题的实际效果如何?
- wso2 - 在 WSO2 中是否有用于添加/更新身份提供者的 API?
- sql - 在 SQL Server 中组合相似的行