将UIView添加到UICollectionViewController的底部

时间:2017-08-22 11:19:50

标签: ios swift uiview uicollectionview

我在UICollectionViewController中嵌入了UINavigationController,而UITabBarController内嵌了UIView

enter image description here

我想在标签栏上方的UICollectionViewController添加UIView(以红色矩形显示)。

enter image description here

我将import UIKit class BottomView: UIView { @IBOutlet var view: UIView! required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commonInit() } override init(frame: CGRect) { super.init(frame: frame) commonInit() } fileprivate func commonInit() { Bundle.main.loadNibNamed("BottomView", owner: self, options: nil) view.frame = self.frame view.autoresizingMask = [.flexibleHeight, .flexibleWidth] addSubview(view) } } 单独创建为nib文件。

UICollectionViewController

我初始化并将其添加到class CollectionViewController: UICollectionViewController { fileprivate var bottomView: BottomView! override func viewDidLoad() { super.viewDidLoad() let yPos = view.bounds.height - (tabBarController!.tabBar.frame.size.height + 44) bottomView = BottomView(frame: CGRect(x: 0, y: yPos, width: view.bounds.width, height: 44)) collectionView?.addSubview(bottomView) } // ... } 中,就像这样。

y

我想如果我从整个视图的高度中减去底部视图和标签栏的组合高度,我应该能够获得正确的WHERE object_id = OBJECT_ID(N'fk_in_tbl_in_other_db') 位置值。但它没有发生。视图正在被添加,但是离开了屏幕。

如何在不对其进行硬编码的情况下计算正确的y位置?

Example demo project

2 个答案:

答案 0 :(得分:0)

您想要实现的内容正是UICollectionView的页脚视图。

footerView就像一个视图,它会粘在collectionView的底部,不会随着单元格一起移动。

这将有助于您添加页脚视图:https://stackoverflow.com/a/26893334/3165112

希望有所帮助!

答案 1 :(得分:0)

我建议将BottomView添加到UICollectionViewController' view而不是集合视图本身。这是您遇到的问题的一部分。

您还尝试使用BottomView中的值设置viewDidLoad()方法中view.bounds的框架。此时CGRect将返回(0.0, 0.0, 0.0, 0.0),因为布局尚未发生,这很可能是您的定位关闭的原因。尝试将布局逻辑移动到viewWillLayoutSubviews()方法,看看是否有帮助。

更好的方法是设置自动布局约束而不是手动定义框架,这将为您带来大量的工作。

这是一个简单的例子:

self.bottomView.translatesAutoresizingMaskIntoConstraints = false
self.view.insertSubview(self.bottomView, at: 0)
self.bottomView.bottomAnchor.constraint(equalTo: self.view.layoutMarginsGuide.bottomAnchor).isActive = true
self.bottomView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
self.bottomView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
self.bottomView.heightAnchor.constraint(equalToConstant: 100.0).isActive = true

您可以在viewDidLoad()中应用自动布局逻辑,它应该可以正常工作。

您可以在此处找到有关以编程方式设置自动布局约束的更多信息:

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ProgrammaticallyCreatingConstraints.html