在 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 中设置清晰的背景颜色

如何在 Swift 中设置属性本身可变的属性值

我可以在情节提要中设置分组的 tableView 部分编号吗?

在 UITableviewcell swift 中设置水平渐变

无法在 Swift 中设置 UITableViewCell 中使用的 UIView 子类的背景颜色

Swift 3 - 根据单击的单元格在 TableViewController swift 文件中设置变量