使UITableView不可滚动并调整高度以容纳所有单元格

时间:2014-06-06 20:26:07

标签: ios uitableview

我将UITableView嵌入另一个UIScrollView内。我只希望UIScrollView滚动,而不是UITableView,因此我想禁用UITableView中的滚动,以及展开contentHeight UITableView }一次容纳所有动态。

我将如何做到这一点?

8 个答案:

答案 0 :(得分:11)

将tableView大小设置为与contentSize相同。

override func viewDidLayoutSubviews() {
    tableView.frame.size = tableView.contentSize
}

答案 1 :(得分:10)

您需要将UITableView滚动设置为false

tableview.scrollEnabled = false;

tableview.frame = CGRectMake(tableview.frame.origin.x, tableview.frame.origin.y, tableview.frame.size.width, tableview.frame.size.height+(resultArray.count*HEIGHT_OF_CELL));

然后,您可以在UITableView上添加UIScrollView,将其内容大小设置为UITableView高度。

答案 2 :(得分:7)

将tableView滚动属性设置为false。

第一种方法:

  1. 为tableView创建一个子类,并覆盖internalContentSize。

         class MyOwnTableView: UITableView {
        override var intrinsicContentSize: CGSize {
            self.layoutIfNeeded()
            return self.contentSize
        }
    
        override var contentSize: CGSize {
            didSet{
                self.invalidateIntrinsicContentSize()
            }
        }
    
        override func reloadData() {
            super.reloadData()
            self.invalidateIntrinsicContentSize()
        }
    }
    
  2. 在“界面”构建器中,将tableView的类更改为MyOwnTableView(UITableView的子类)。

  3. 设置表格视图的自动行高。

        tableView.estimatedRowHeight = 60.0;
        tableView.rowHeight = UITableViewAutomaticDimension;
    

第二种方法:        1.为tableView创建一个具有任何值的高度约束,并连接设置tableView高度的IBOutlet。

  1. 在重新加载数据后,将高度约束的常量设置为tableView.contentSize.height。

    self.tableViewHeight.constant = self.tableView.contentSize.height
    

答案 3 :(得分:5)

基本上,tableview的内容大小就是您所需要的。

  1. 将tableview滚动设置为false因为我们不想要骂人行为。

  2. 获取tableview的高度限制的参考。

  3. 设置tableViewHeightConstraint.constant = tableView.contentSize.height

  4. 确保,tableview的顶部,底部,前导和尾随约束都在原位。

答案 4 :(得分:3)

  1. 让您的桌面框架覆盖所有可能的线条 - >没有用于表格视图的滚动
  2. 设置scrollview的contentSize = tableViews的大小。

答案 5 :(得分:1)

  • 首先,您需要设置UITableView滚动到NO
  • 其次,为表格视图创建height constraint,并在致电[UITableView reloadData]后更改height constraint

    tableViewHeightConstraint.constant = numberOfRows * heightOfEachRow;
    

答案 6 :(得分:0)

UITableView是一个滚动视图。虽然您不应该嵌套UIScrollviews,但您可以禁用滚动表视图。

答案 7 :(得分:0)

虽然使用固定内容的tableview作为scrollview中的子视图来完成这个非常简单,但是你究竟想要完成什么呢?上下固定内容的动态单元格?永久显示的内容,中间有滑动部分?

也许更简洁的设计是使用带有表头和页脚的单个UITableView,或者利用UITableViewStyleGrouped与UITableViewStylePlain提供的自动行为的页眉和页眉

尽管如此,其他答案似乎形成了一个不错的解决方案:

Set scroll enabled false on table view
Set tableview content size to sum of all cell sizes
Set tableview frame to content size
Adjust scroll view frame to account for dynamic table size if necessary
Add table view to scroll view amidst other content

操作滚动行为的另一个选择是检查委托scrollView shouldStartScrolling或类似方法中的tableview或scrollview,因为这将允许更多的UI控件灵活性