如何调整UITableview的大小以适应动态行数

时间:2015-10-10 12:20:42

标签: ios swift uitableview uiscrollview resize

我正在使用UIView和一个UITableView的一些元素构建一个View Controller。此视图将比iPhone屏幕大,而不是将所有这些元素放在UIScrollView和配置的自动布局中。

UITableView中的行数是动态的,我需要在单个屏幕中显示所有内容。我不想启用UITableView滚动属性,因为使用主UIScrollView和UITableview滚动将完全混乱

我已经在StackOverflow上研究了几天关于这个问题的帖子,找不到像我这样的问题。

这是试图调整UITableView和UIScrollView

的代码
    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Configuring dataSource an delegate
        self.tableView.dataSource = self
        self.tableView.delegate = self

        // Sizing all the elements inside scrollView
        var contentRect = CGRectZero
        for view:UIView in self.scrollView.subviews {
            contentRect = CGRectUnion(contentRect, view.frame)
        }

        print(contentRect)

        // Trying to resize the tableView and scrollView to fit more contents
        self.tableView.contentSize = CGSizeMake(scrollView.frame.width, CGFloat(441))
        scrollView.contentSize =  CGSizeMake(scrollView.frame.width, CGFloat(877))
        scrollView.delaysContentTouches = true
        scrollView.canCancelContentTouches = false

        // Looking for a new size and nothing change
        var contentRect2 = CGRectZero
        for view:UIView in self.scrollView.subviews {
            contentRect2 = CGRectUnion(contentRect2, view.frame)
        }
        print(contentRect2)

        print("Tableview width  \(self.tableView.frame.width)")
        print("Tableview height \(self.tableView.frame.height)")
}

GitHub

上的示例项目

我感谢任何帮助

ViewControl的布局:

Layout

1 个答案:

答案 0 :(得分:1)

此问题的简短但错误的答案是向tableview添加autolayout约束,将高度限制为常量。您可以将其设置为最佳猜测,但在运行时将其设置为等于tableview的内容大小的高度。

这种方法的问题在于它完全消除了tableview和可重用单元的好处。表视图专门设计用于最小化视图的内存占用。存储表示数据的视图(单元格)需要更多的内存,而不是跟踪填充这些单元格的数据。

相反,更好的解决方案是在表视图中使用多个部分。使用屏幕截图中的示例,您的父滚动视图将是一个tableview而不是滚动视图。它将有四个部分。在第一部分中,我们返回一个带有黄色视图的行,它被配置为一个表视图单元格,我们在第三个&第四节。在第二部分中,我们返回您在表视图中使用的许多行。

或者,黄色视图可以被认为是表格标题,而蓝色和&红色视图成为表格页脚,中间是行。