我有UITableViewCell
个自定义视图单元格。
在这个视图单元格中,我有一个名为imgWrapper的简单UIView
,其中我添加了约束,如下所示:
那是那里唯一的限制因素。然后我将拥抱和压缩保留为默认值。
在我的代码中,我设置了这个:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 90
}
然后在我的rowAtIndex中...我有这个:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: LogCustomCell = tableView.dequeueReusableCellWithIdentifier("logCustomCell", forIndexPath: indexPath) as! LogCustomCell
var imgWrapperHeight: CGFloat = log.big ? 100 : 50
cell.imgWrapperHeight.frame.size.height = imgWrapperHeight
return cell
}
一旦我编译并运行它。所有细胞大小相同。
注意:
CGRect(x,y,width,height)
但也没有工作。 heightForRowAtIndexPath
但是我想做动画,我知道我们可以为标签做这样的事情(参见printscreen),这使得tableView知道高度而不定义它:任何想法我做错了什么?
答案 0 :(得分:2)
您需要将高度逻辑放入名为UITableViewDelegate
的{{1}}方法中,如下所示:
tableView:heightForRowAtIndexPath
PS。我在Swift 2中写了这个,因此是override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return (true ? 100 : 50) + 2 * 20
}
关键字。
答案 1 :(得分:1)
委托方法“heightForRowAtIndexPath”将为您完成。您可以知道从indexPath.row返回高度的单元格索引,从而相应地返回高度。
即
if indexPath.row == 0
{
return 70
}
else if indexPath.row == 1
{
return 100
}
答案 2 :(得分:1)
添加
self.automaticallyAdjustsScrollViewInsets = false
在这两行之前
tableView.estimatedRowHeight = 50
tableView.cellHeight = UITableViewCellAutomaticDimension
答案 3 :(得分:0)
解决方案1:
正如用户所说。您可以在UITableViewController中设置行高,如下所示:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return (true ? 100 : 50) + 2 * 20
}
解决方案2:
在将决定单元格高度的元素上设置height
约束。然后在VC中为NSLayoutConstraint
创建一个插座
在设置单元格的内容时,您可以执行以下操作:
例: @IBOutlet var imgWrapperHeightConstraint:NSLayoutConstraint!
...
override func tableView(tableView: UITableView, cellAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
imgWrapperHeightConstraint.constant = 50 // Or whatever value you want
}