【问题标题】:How to resize a UITableview to fit the dynamic number of rows如何调整 UITableview 的大小以适应动态行数
【发布时间】:2015-10-10 21:17:30
【问题描述】:

我正在构建一个视图控制器,其中包含一些 UIView 元素和一个 UITableView。这个视图将比 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的布局:

【问题讨论】:

    标签: ios swift uitableview uiscrollview resize


    【解决方案1】:

    这个问题的简短但错误的答案是向 tableview 添加一个自动布局约束,将高度约束为恒定大小。您可以将其设置为您的最佳猜测,但在运行时将其设置为等于 tableview 的内容大小的高度。

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

    因此,更好的解决方案是在表格视图中使用多个部分。使用屏幕截图中的示例,您的父滚动视图将是一个表格视图而不是滚动视图。它将有四个部分。在第一部分,我们返回一个带有黄色视图的单行,它被配置为一个表格视图单元格,我们在第三和第四部分做同样的事情。在第二部分中,我们返回您在表格视图中使用的行数。

    或者,黄色视图可以被认为是表头,蓝色和红色视图成为表尾,行在中间。

    【讨论】:

      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      相关资源
      最近更新 更多