我有一个UITableViewController
,我想在保持导航栏的同时在它上面放置一个UIView(不是覆盖/覆盖,就在上面)。
我在Swift(3)中这样做,我以编程方式完成所有操作(没有故事板)。
这就是我目前在UITableViewController
中所做的事情,我在编程方面遇到限制时遇到困难,我不确定我需要什么:
// Create the view (add subview in viewDidLoad)
let topView: UIView = {
let tv = UIView()
tv.backgroundColor = UIColor.darkGray
tv.translatesAutoresizingMaskIntoConstraints = false
tv.layer.masksToBounds = true
return tv
}()
// Constraints (call in viewDidLoad)
func setupTopView() {
//x, y, width, height constraints
topView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
topView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
topView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
topView.heightAnchor.constraint(equalToConstant: 100)
}
任何人都知道怎么做?
编辑:谢谢@Sneak,这就是我最终的目标:override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerLabel = UILabel()
let logoView = UIImageView()
headerLabel.frame = CGRect(x: 0, y: 0, width: 200, height: 21)
headerLabel.text = self.navigationItem.title
headerLabel.textColor = UIColor.white
headerLabel.backgroundColor = UIColor.clear
logoView.frame = CGRect(x: 0, y: 0, width: 90, height: 90)
let logo: UIImage = UIImage(named: self.navigationItem.title!)!
logoView.image = logo
view.addSubview(headerLabel)
view.addSubview(logoView)
return topView
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 175
}
答案 0 :(得分:2)
实施方法tableView(_:viewForHeaderInSection:)
如果您只有1个部分,只需在方法中返回UIView
。
如果您有多个部分,则只返回第1部分的UIView。
tableView(_:heightForHeaderInSection:)如何设置身高。
您也可以执行此操作:tableView.tableHeaderView = headerView
答案 1 :(得分:0)
执行此操作会遇到很大困难,因为您无法真正访问UITableViewController的根视图。您应该切换到其中包含tableView的UIViewController,然后您可以将topView添加为控制器根视图的子视图并添加约束。
答案 2 :(得分:0)
我的建议是使用UIViewController
代替UITableViewController
。
这样,您可以根据需要正确设置整个视图,方法是使顶部横幅UIView
占据导航栏下方顶部的一定空间,然后定位{{1在它下方,使用约束捕捉到UITableView
的底部和底部布局指南的顶部。
我还强烈建议您使用Storyboard,因为根据我在UIView
内构建UITableView
的应用的经验,您真的无能为力在Storyboard中以可视方式设置后以编程方式进行。那些完全以编程方式完成工作的人在网上提供了大量的代码和建议,但是如果你没有真正具体的理由,我推荐使用Storyboard。特别是在这种情况下,它会真正帮助您通过适当的约束快速准确地进行布局。