在 tableview 上添加一个视图
Adding a view over the tableview
我必须创建一个看起来像这样的屏幕。
我已经用 UITableViewController
完成了它。我走那条路线而不是使用 UIViewController
和 UIScrollView
的原因是,中间的 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,实现 UIScrollViewDelegate
的 scrollViewDidScroll
方法,并根据 contentOffset
更改按钮视图的 origin.y
table。并且,不要忘记在您的 table 中插入一些底部内容,这样您的按钮视图在滚动到底部时不会与任何内容重叠。希望这对您有所帮助。祝你好运!
开始吧 - 我已经为您设置了一个基本项目。
你可以在这里得到它:https://github.com/99arobe/ButtonTest
它使用容器和自动布局,因此应该可以帮助您入门。大致是这样的:
可能有几种方法可以做到这一点,但是当您开始在代码中设置视图的框架时,您将无法获得自动布局的好处,除非您也手动添加该代码。
我必须创建一个看起来像这样的屏幕。
我已经用 UITableViewController
完成了它。我走那条路线而不是使用 UIViewController
和 UIScrollView
的原因是,中间的 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,实现 UIScrollViewDelegate
的 scrollViewDidScroll
方法,并根据 contentOffset
更改按钮视图的 origin.y
table。并且,不要忘记在您的 table 中插入一些底部内容,这样您的按钮视图在滚动到底部时不会与任何内容重叠。希望这对您有所帮助。祝你好运!
开始吧 - 我已经为您设置了一个基本项目。
你可以在这里得到它:https://github.com/99arobe/ButtonTest
它使用容器和自动布局,因此应该可以帮助您入门。大致是这样的:
可能有几种方法可以做到这一点,但是当您开始在代码中设置视图的框架时,您将无法获得自动布局的好处,除非您也手动添加该代码。