在tableview上添加视图

时间:2016-05-14 10:47:18

标签: ios swift uitableview uiscrollview footer

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

enter image description here

我有almsot使用UITableViewController完成了它。我走这条路线而不是使用UIViewControllerUIScrollView的原因是,中间的表视图是静态的,只有UITableViewControllers可以有静态表视图。无论如何,我目前的结果就是这个。

enter image description here

表的标题视图顶部包含标签,页脚视图包含地图视图。

我为这两个按钮创建了一个单独的UIView子类,其中有一个名为ButtonView的nib。

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)
    }
}

我尝试将其添加到表格视图控制器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

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

enter image description here

如何让他们适当调整大小并适合屏幕?

3 个答案:

答案 0 :(得分:2)

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

以下是一个示例项目的链接:(在Objective-C中,但概念和布局完全相同。)

https://github.com/DuncanMC/test

编辑:

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

答案 1 :(得分:2)

在这里 - 我为您设置了一个基本项目。

您可以在此处获取:https://github.com/99arobe/ButtonTest

它使用容器和自动布局,所以它应该让你开始。它大致如下:

enter image description here

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

答案 2 :(得分:1)

除了Duncan的建议,如果您不想要容器视图,还有另一种解决方法可以解决您的问题。按照您现在的操作将按钮视图添加到表中,实施scrollViewDidScroll UIScrollViewDelegate方法,并根据{{更改按钮的视图origin.y表的1}}并且,不要忘记在桌面上添加一些底部内容,以便在滚动到底部时按钮视图不会重叠任何内容。希望这有用。祝你好运!