2014-11-02 210 views
0

我有一个UIScrollView,顶部有一些信息来源,并在按钮上有一个UITableView。表视图不能滚动,所以为了能够显示大量的单元格,我需要手动计算东西。这就是我实际做的(你可以在下面的代码中看到)。同时,表格视图的容器也应随之增长。我试图在加载视图时更改这些参数,但没有什么真正改变...动态表格视图+滚动视图

这是它的样子。在IB。

enter image description here

的结构。

enter image description here

和代码。

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 
    @IBOutlet var scrollView: UIScrollView! 
    @IBOutlet var tableView: UITableView! 

    let numberOfCells = 55 
    let rowHeight: CGFloat = 40 
    let footerHeight: CGFloat = 30 
    let headerHeight: CGFloat = 30 

    let identifier = "Cell" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.tableView.dataSource = self 
     self.tableView.delegate = self 
     self.tableView.backgroundColor = self.view.backgroundColor 
     self.tableView.scrollEnabled = false 

     self.automaticallyAdjustsScrollViewInsets = false 
     self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: self.identifier) 

     let estimatedHeight = CGFloat(self.numberOfCells) * self.rowHeight + self.footerHeight + self.headerHeight 
     self.tableView.frame.size = CGSizeMake(self.tableView.bounds.width, estimatedHeight) 
     self.scrollView.contentSize = CGSizeMake(self.view.bounds.width, CGRectGetMaxY(self.tableView.frame)) 
     self.scrollView.frame.size = CGSizeMake(self.view.bounds.width, CGRectGetMaxY(self.tableView.frame)) 
    } 

    // MARK:- Table view data source 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.numberOfCells 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier(self.identifier) as UITableViewCell 

     cell.textLabel?.text = "City" 
     cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator 

     return cell 
    } 

    // MARK:- Table view delegate 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return self.rowHeight 
    } 

    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
     return self.headerHeight 
    } 

    func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { 
     return self.footerHeight 
    } 
} 

那么,可能是什么原因?如何制作我想要的?坦率地说,我对UIScrollView并不很熟悉,但是有一些教程构建了图像。

回答

1

基本上,这是一个很不好的方法。只有当你有一个非常特殊的功能时才能应用它。一般来说,你可以简单地把所有内容放在UITableView之内。只需创建一个UIView实例,添加子视图,制作布局内容并将此视图分配为tableView.tableHeaderView。它适合我,也希望你也能! :)

0

UITableView将自动滚动 - 但它不能,因为您已将其高度设置为所有单元格的高度。将高度设置为屏幕高度,一切都会很好。

UIScrollView是不必要的,但您在这里也完成了相同的操作 - 您已将滚动视图框架高度和内容高度设置为表格视图的高度。只设置内容高度将使滚动视图能够完成其工作。

快乐编码。

+0

谢谢你的回复!重点是做一个不可滚动的表格视图,但提供所有的单元格的帮助下UIScrollView ... – Majotron 2014-11-02 16:54:53