在 tableview 上添加视图
Posted
技术标签:
【中文标题】在 tableview 上添加视图【英文标题】:Adding a view over the tableview 【发布时间】:2016-09-10 13:48:45 【问题描述】:我必须创建一个看起来像这样的屏幕。
我已经使用UITableViewController
完成了它。我走这条路而不是使用UIViewController
和UIScrollView
的原因是,中间的表格视图是静态的,只有UITableViewControllers
可以有静态表格视图。反正我现在的结果是这样的。
表格的页眉视图包含顶部的标签,页脚视图包含地图视图。
我创建了一个单独的 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)
我尝试将它添加到表视图控制器的 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 实例时有效。 只需使用容器视图将 tableviewcontroller 嵌入到您的标准 ViewController 中 【参考方案1】:我建议走不同的路线。将您的 UITableviewController
放在普通视图控制器的容器视图中。它为您提供两全其美的体验。您的父 VC 可以拥有您想要的任何视图,并且包含的 UITableviewController
为您管理您的静态表视图。
这是一个示例项目的链接:(在 Objective-C 中,但概念和布局是相同的。)
https://github.com/DuncanMC/test
编辑:
正如@Gordonium 在他的回答中所暗示的那样,在代码中添加视图但不设置约束很少会产生您想要的结果。如果您在代码中添加视图并且正在使用 AutoLayout,那么您还需要添加一组约束来指定视图的大小和间距。使用 IB 设置视图及其约束通常更容易。
【讨论】:
【参考方案2】:给你 - 我已经为你设置了一个基本项目。
您可以在这里获取:https://github.com/99arobe/ButtonTest
它使用容器和自动布局,因此应该可以帮助您入门。大致是这样的:
可能有几种方法可以做到这一点,但是当您开始在代码中设置视图的框架时,除非您手动添加该代码,否则您将无法获得自动布局的好处。
【讨论】:
当您在代码中设置视图的框架时,AutoLayout 通常会接管并撤消您的更改。 是的,这很好。我经常看到人们改变设备的方向,想知道为什么他们的视野突然变成了 x0, y0。 @Gordonium 感谢您提供详细的答案和演示项目。既然你和邓肯的答案都是一样的,但他先发了,我不得不接受他的。感谢您的帮助:)【参考方案3】:除了 Duncan 的建议之外,如果您不想要容器视图,还有另一种解决方法可以解决您的问题。像现在一样将按钮视图添加到表格中,实现UIScrollViewDelegate
的scrollViewDidScroll
方法,并根据表格的contentOffset
更改按钮视图的origin.y
。并且,不要忘记在表格中插入一些底部内容,以便您的按钮视图在滚动到底部时不会重叠任何内容。希望这会有所帮助。祝你好运!
【讨论】:
以上是关于在 tableview 上添加视图的主要内容,如果未能解决你的问题,请参考以下文章