UITableViewWrapperView
,则 UITableViewAutomaticDimension
大小不会根据内容进行更改。
我正在尝试使用TableView和动态高度行创建Feed列表。
TableView是可滚动的,但UITableViewWrapperView
看起来没有改变它的大小!
以下是视图层次结构的代码和屏幕截图。
我觉得很奇怪。
代码:
class FeedController: UITableViewController {
var items: NSMutableArray = []
override func viewDidLoad() {
super.viewDidLoad()
refreshControl?.addTarget(self, action: "feedLoad", forControlEvents: UIControlEvents.ValueChanged)
self.feedLoad()
}
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 120.0
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
println("called")
return UITableViewAutomaticDimension
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return self.getCellForItemAtIndexPath( indexPath )
}
func getCellForItemAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell {
let item: Dictionary = self.items[indexPath.row] as Dictionary<String, AnyObject>
let cell = tableView.dequeueReusableCellWithIdentifier( (item["type"] as String) + "Cell", forIndexPath: indexPath ) as FeedViewCell
cell.fillData(item)
return cell as UITableViewCell
}
func feedLoaded(){
tableView.reloadData()
}
func feedLoad(){
// Feed Load Logic which will call next line once feed loaded
self.feedLoaded()
}
}
答案 0 :(得分:0)
我假设您已为您的手机配置了自动布局,因为这是实现此功能的唯一方法。自动布局应该能够根据您的单元格约束计算高度。
因此,您应该在垂直视图之间以及超视图的顶部和底部边缘上的视图之间存在约束(在本例中为单元格视图)。
假设您有一个标题和描述的单元格,如下所示:
|------------------|
| Title |
| |
| Description with |
| long multiple |
| lines of text |
|------------------|
在此示例中,您必须设置添加约束,其中title
和description
之间的垂直空间是title
顶部和description
顶部空间的约束。单元格视图顶部和n
底部与单元格视图底部之间的垂直空间。
答案 1 :(得分:0)
estimatedHeightForRowAtIndexPath()的文档说,该调用重新调整的值是所有滚动事件发生之前的占位符值。我猜测当滚动偶然发生时,将调用heightForRowAtIndexPath。所以:
答案 2 :(得分:0)
使用 automaticDimention 时,应在 UItableViewCell 中的UILabel两侧添加约束。