我在UICollectionViewController
中嵌入了UINavigationController
,而UITabBarController
内嵌了UIView
。
我想在标签栏上方的UICollectionViewController
添加UIView
(以红色矩形显示)。
我将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位置?
答案 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()
中应用自动布局逻辑,它应该可以正常工作。
您可以在此处找到有关以编程方式设置自动布局约束的更多信息: