(Swift)以编程方式在UITableViewController上添加UIView

时间:2017-02-15 21:46:32

标签: ios swift uitableview uiview

我有一个UITableViewController,我想在保持导航栏的同时在它上面放置一个UIView(不是覆盖/覆盖,就在上面)。

这是我尝试实现的一个很好的例子,除了我说我还想要导航条:enter image description here

我在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
}

3 个答案:

答案 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。特别是在这种情况下,它会真正帮助您通过适当的约束快速准确地进行布局。