在 tableview 上添加一个视图

Adding a view over the tableview

我必须创建一个看起来像这样的屏幕。

我已经用 UITableViewController 完成了它。我走那条路线而不是使用 UIViewControllerUIScrollView 的原因是,中间的 table 视图是静态的,只有 UITableViewControllers 可以有静态 table 意见。反正我现在的结果是这样。

table 的页眉视图包含顶部的标签,页脚视图包含地图视图。

我为两个按钮创建了一个单独的 UIView 子类,其中包含一个名为 ButtonView 的笔尖。

import UIKit

class ButtonView: UIView {

    @IBOutlet var view: UIView!
    @IBOutlet weak var declineButton: UIButton!
    @IBOutlet weak var acceptButton: UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)

        NSBundle.mainBundle().loadNibNamed("ButtonView", owner: self, options: nil)
        self.bounds = view.bounds
        self.addSubview(self.view)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        NSBundle.mainBundle().loadNibNamed("ButtonView", owner: self, options: nil)
        self.addSubview(self.view)
    }
}

我尝试将它添加到 table 视图控制器的 view 然后 tableView 但两次它都被添加到滚动视图。我希望将这些按钮固定在底部。所以我将它们添加到 window.

class TableViewController: UITableViewController {

    var buttonView: ButtonView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 35, right: 0)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        buttonView = ButtonView(frame: CGRect(x: 0, y: view.frame.size.height - 35, width: view.frame.width, height: 35))
        UIApplication.sharedApplication().keyWindow!.addSubview(buttonView)
    }
}

但是正如您从上面的屏幕截图中看到的那样,按钮的宽度已关闭。他们没有正确调整大小以适合屏幕。我已经在 ButtonView.

中设置了所有必要的自动布局约束

如何让它们调整大小并正确适合屏幕?

我建议走另一条路。将 UITableviewController 放在普通视图控制器的容器视图中。它为您提供两全其美的体验。您的父级 VC 可以拥有您想要的任何视图,包含的 UITableviewController 会为您管理您的静态 table 视图。

这里是一个 link 示例项目,它正是这样做的:(在 Objective-C 中,但概念和布局是相同的。)

https://github.com/DuncanMC/test

编辑:

正如@Gordonium 在他的回答中提到的那样,在代码中添加视图但不设置约束很少会产生您想要的结果。如果您在代码中添加视图并且您正在使用 AutoLayout,那么您还需要添加一组约束来指定视图的大小和间距。使用 IB 设置视图及其约束通常更容易。

除了 Duncan 的建议之外,如果您不想要容器视图,还有另一种解决方法可以解决您的问题。像现在一样将按钮视图添加到 table,实现 UIScrollViewDelegatescrollViewDidScroll 方法,并根据 contentOffset 更改按钮视图的 origin.y table。并且,不要忘记在您的 table 中插入一些底部内容,这样您的按钮视图在滚动到底部时不会与任何内容重叠。希望这对您有所帮助。祝你好运!

开始吧 - 我已经为您设置了一个基本项目。

你可以在这里得到它:https://github.com/99arobe/ButtonTest

它使用容器和自动布局,因此应该可以帮助您入门。大致是这样的:

可能有几种方法可以做到这一点,但是当您开始在代码中设置视图的框架时,您将无法获得自动布局的好处,除非您也手动添加该代码。