我正在构建具有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 - 如何调整UITableview的大小以适合动态行数-LMLPHP

最佳答案

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

这种方法的问题在于,它完全消除了tableview和可重用单元格的好处。表格视图的设计旨在最大程度地减少视图的内存占用。存储表示您的数据的视图(单元格)所花费的内存要比跟踪这些单元格所填充的数据要多得多。

因此,更好的解决方案是在表视图中使用多个部分。使用屏幕快照中的示例,您的父滚动视图将是一个表视图而不是滚动视图。它将有四个部分。在第一部分中,我们返回带有黄色视图的单行,该视图被配置为表格视图单元格,并且在第三和第四部分中也是如此。在第二部分中,我们将返回您在表视图中使用的许多行。

或者,可以将黄色视图视为表格标题,而将蓝色和红色视图视为表格页脚,中间各行。

关于ios - 如何调整UITableview的大小以适合动态行数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33053918/

10-15 18:08