在 Tableview (Swift) 中设置静态位置视图
Posted
技术标签:
【中文标题】在 Tableview (Swift) 中设置静态位置视图【英文标题】:Set static position View inside Tableview (Swift) 【发布时间】:2016-05-05 02:51:54 【问题描述】:目前我正在将我所有的故事板视图控制器传递给代码,目前我遇到了一个视觉问题。由于某种原因,这不会在我的代码 addSubView()
上复制这就是它在我的故事板上的样子
这是在 tableview 中附加 View 的代码
let profileView = UIView(frame: CGRectMake(0,0,500,45))
profileView.backgroundColor = UIColor(red:0.35, green:0.77, blue:0.66, alpha:1)
self.tableview.addSubview(profileView)
问题在于,使用此代码,视图会在我上下滚动时滚动视图,而使用 Storyboard VC,它只会滚动 Tableview,而我的视图只是在我放置它的位置上保持静态,这就是方式我喜欢它。 “静态”
这也说明了我想要实现的目标。
【问题讨论】:
【参考方案1】:我为你把这个放在一起。这是如何做到这一点的一个例子。然而,UITableview 并不打算以这种方式使用。您可以看到单元格 0 被您的自定义视图覆盖。从数据源填充表格视图时,您必须考虑到这一点。
import UIKit
class testTableVIewController: UITableViewController
@IBOutlet var theTableView: UITableView!
var profileView:UIView
required init?(coder aDecoder: NSCoder)
profileView = UIView(frame: CGRectMake(0,0,500,45))
profileView.backgroundColor = UIColor(red:0.35, green:0.77, blue:0.66, alpha:1)
super.init(coder: aDecoder)
override func viewDidLoad()
super.viewDidLoad()
self.theTableView.addSubview(profileView)
override func scrollViewDidScroll(scrollView: UIScrollView)
profileView.frame = CGRectOffset( profileView.frame, scrollView.contentOffset.x, 0 );
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 20
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = theTableView.dequeueReusableCellWithIdentifier("cell")
cell?.textLabel?.text = String(indexPath.row)
return cell!
您应该做的是,而不是将视图作为表格视图的子视图。
-
创建一个视图。 (为方便起见,我将此称为内容视图)
将视图添加到此内容视图。
将表格视图添加到内容视图。
只需在内容视图中将视图/表格视图彼此相邻放置。 这将具有滚动表格视图和彼此相邻的静态视图的预期效果。如果想要的效果是表格视图上的浮动视图,则反转步骤 2 和 3。
哦,顺便说一句。如果您在代码中完成所有操作,则更改为这种布局非常容易。只需将您的 tableview 控制器更改为视图控制器并采用 UITablview 协议。
class testTableVIewController: UITableViewController
class testTableVIewController: UIViewController,UITableViewDataSource,UITableViewDelegate
然后为 tableview 类添加一个属性。还将其添加到 self.view 的正确位置。还记得将你的绿色视图添加到 self.view
如果你这样做,你根本不需要更改太多代码。
【讨论】:
不是我正在寻找的答案,因为它会迫使我创建一个 Viewcontroller 并更改我当前的大部分逻辑。由于 UITableviewController 而不是 UIViewController,应该有一种更简单的方法。 你想要做的实际上更难。您将需要跟踪滚动位置并在表格视图滚动时移动视图。为此使用 scrollViewDidScroll。实际上,只需很少的代码就可以按照我所说的方式进行更改。 没关系。同样的想法也适用。您正在使用相同的类对象。只是以不同的方式将它们添加到屏幕上。 您还可以看到我使用您自己的代码添加了您的绿框。只需将其移至一个属性,以便可以在 scrollViewDidScroll 中访问它 让我们continue this discussion in chat.以上是关于在 Tableview (Swift) 中设置静态位置视图的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 在 UITableView 中设置清晰的背景颜色
我可以在情节提要中设置分组的 tableView 部分编号吗?
在 UITableviewcell swift 中设置水平渐变