如何调整 UITableview 的大小以适应动态行数
How to resize a UITableview to fit the dynamic number of rows
我正在构建一个包含 UIView 的一些元素和一个 UITableView 的视图控制器。此视图将比 iPhone 屏幕大,而不是我将所有这些元素放入 UIScrollView 并配置自动布局。
UITableView 中的行数是动态的,我需要所有内容都在一个屏幕上可见。我不想启用 UITableView 滚动 属性 因为与主 UIScrollView 和 UITableview 滚动
一起工作会很混乱
我已经在 Whosebug 上搜索了好几天有关此问题的帖子,但找不到与我的问题类似的内容。
这是试图调整 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)")
}
上的示例项目
感谢任何帮助
ViewControl 的布局:
这个问题的简短但错误的答案是向 table 视图添加自动布局约束,将高度限制为恒定大小。您可以将其设置为您的最佳猜测,但在运行时将其设置为等于 table 视图内容大小的高度。
这种方法的问题在于它完全消除了 table视图和可重用单元格的优势。 Table 视图专门用于最小化视图的内存占用。存储表示数据的视图(单元格)比跟踪要填充这些单元格的数据需要更多的内存。
因此,更好的解决方案是在 table 视图中使用多个部分。使用屏幕截图中的示例,您的父滚动视图将是 table 视图而不是滚动视图。它将有四个部分。在第一部分中,我们 return 带有黄色视图的单行被配置为 table 视图单元格,我们在第三和第四部分中做同样的事情。在第二部分中,我们 return 无论您在 table 视图中使用了多少行。
或者,黄色视图可以被认为是 table 页眉,蓝色和红色视图成为 table 页脚,行在中间。
我正在构建一个包含 UIView 的一些元素和一个 UITableView 的视图控制器。此视图将比 iPhone 屏幕大,而不是我将所有这些元素放入 UIScrollView 并配置自动布局。
UITableView 中的行数是动态的,我需要所有内容都在一个屏幕上可见。我不想启用 UITableView 滚动 属性 因为与主 UIScrollView 和 UITableview 滚动
一起工作会很混乱我已经在 Whosebug 上搜索了好几天有关此问题的帖子,但找不到与我的问题类似的内容。
这是试图调整 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)")
}
上的示例项目
感谢任何帮助
ViewControl 的布局:
这个问题的简短但错误的答案是向 table 视图添加自动布局约束,将高度限制为恒定大小。您可以将其设置为您的最佳猜测,但在运行时将其设置为等于 table 视图内容大小的高度。
这种方法的问题在于它完全消除了 table视图和可重用单元格的优势。 Table 视图专门用于最小化视图的内存占用。存储表示数据的视图(单元格)比跟踪要填充这些单元格的数据需要更多的内存。
因此,更好的解决方案是在 table 视图中使用多个部分。使用屏幕截图中的示例,您的父滚动视图将是 table 视图而不是滚动视图。它将有四个部分。在第一部分中,我们 return 带有黄色视图的单行被配置为 table 视图单元格,我们在第三和第四部分中做同样的事情。在第二部分中,我们 return 无论您在 table 视图中使用了多少行。
或者,黄色视图可以被认为是 table 页眉,蓝色和红色视图成为 table 页脚,行在中间。