如何让 UITableView 行高自动调整为 UITableViewCell 的大小?
如何让 UITableView 行高自动调整为 UITableViewCell 的大小?
因此,假设我在 Interface Builder 中创建 UITableViewCell,并且它的高度超过标准大小,我怎样才能让 UITableView 行高自动调整大小呢? (即与必须在界面生成器中手动测量高度并以编程方式设置高度相反)
How to get a UITableView row height to auto-size to the size of the UITableViewCell?
So assuming I'm creating the UITableViewCell in Interface Builder, and it height is more than the standard size, how can I get the UITableView row height to autosize to it? (i.e. as opposed to manually having to measure the height in interface builder and than programmatically setting it)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height / 是一个很棒的教程。
主要位是
http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/ is a great tutorial for this.
The main bit is
如果所有单元格都相同,请将
UITableView
上的rowHeight
属性设置为单元格的大小。如果它们根据内容而不同,您将必须实现-tableView:heightForRowAtIndexPath:
并根据您的数据源计算每行的高度。If all the cells are the same, set the
rowHeight
property onUITableView
to the size of your cell. If they're all different based on content, you're going to have to implement-tableView:heightForRowAtIndexPath:
and calculate the height for each row based on your data source.在带有表格视图的 xib 中,您可以添加一个单元格对象并将其链接到源代码中的 IBOutlet。您不会在任何地方使用它,您只会使用它来获取单元格的高度。
然后,在
tableView:heightForRowAtIndexPath:
中,您可以使用该对象来获取高度。它不是 100% 自动的,但至少这可以省去您在 IB 中的单元格视图中进行更改时手动更新源代码的麻烦。如果所有行都属于同一类型(单元格),您可以通过编程方式设置
tableView.rowHeight
属性,而不是实现上面的委托方法。取决于你的场景。哦,请确保不要忘记在
-dealloc
中释放 myDummyCellObject。In the xib with your tableview, you can add a cell object and link it to an IBOutlet in your source-code. You won't use it anywhere, you will just use this to get the height of the cell.
Then, in
tableView:heightForRowAtIndexPath:
you can use that object to get the height. It's not 100% automatic, but at least this saves you the trouble to manually update your source code when you make changes in the cell view in IB.If all rows are of the same type (cell) you can programatically set the
tableView.rowHeight
property instead of implementing the delegate method above. Depends on your scenario.Oh, and make sure you don't forget to release myDummyCellObject in
-dealloc
.实现 UITableViewDataSource 时所需方法:
When implement UITableViewDataSource required method:
从 iOS 8 开始,您可以选择工作通过在表格视图上指定这些选项来使用自动调整单元格大小:
只要系统可以根据现有约束或内容计算行,这就会起作用。请注意,如果您设置automaticDimension,则不会调用heightForRowAtIndexPath!
有时,对于更复杂的数据,某些单元格可以自动计算,但其他单元格则需要特定的高度计算逻辑。在这种情况下,您应该仅设置estimatedRowHeight,然后使用可以正常工作的单元格的自动逻辑实现cellForRowAtIndexPath:
As of iOS 8 you have the option to work with self-sizing cells by specifying these options on your table view:
This will work as long as the system can calculate the rows based on existing constraints or content. Take care that if you set automaticDimension then heightForRowAtIndexPath will not be called!
Sometimes with more complex data some cells can be calculated automatically, but others need a specific height calculation logic. In this case you should only set the estimatedRowHeight and then implement cellForRowAtIndexPath with automatic logic for the cells that can work correctly: