我试图用快速自我调整单元格做侧边栏。我找到了这个很棒的教程:http://www.appcoda.com/self-sizing-cells/
据我所知,你需要做3件事来制作一个自定型单元格:
最后两个在代码中涵盖在教程中,但第一个是由故事板解释的,我的问题是如何通过代码实现它?
我有这个方法,我得到我的自定义单元格,我认为我必须在这里实现约束(在教程中你可以看到什么样的约束)但我不知道如何,所以请你能给我一些帮助?
override func tableView(tableView: (UITableView!), cellForRowAtIndexPath indexPath: (NSIndexPath!)) -> UITableViewCell{
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "CellId")
cell!.backgroundColor = UIColor.clearColor()
cell!.textLabel?.textColor = UIColor.darkTextColor()
let selectedView:UIView = UIView(frame:CGRect(x: 0, y: 0, width: cell!.frame.size.width, height: cell!.frame.size.height))
selectedView.backgroundColor = UIColor.orangeColor().colorWithAlphaComponent(0.3)
cell!.selectedBackgroundView = selectedView
//asignar valores a la celda
cell!.textLabel?.text = tableData[indexPath.row]
cell!.textLabel?.numberOfLines = 0
cell!.setTranslatesAutoresizingMaskIntoConstraints(false)
}
return cell!
}
更新1:
文本超出了第1行和第3行的第3行,但这里只显示最大值。 3个分界线
谢谢!
答案 0 :(得分:1)
我找到了一个很好的功能来制作细胞动态大小
func dynamicHeight(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
在heightForRowAtIndexPath
中调用此函数我希望它有效。
答案 1 :(得分:0)
不要在tableView(_:cellForRowAtIndexPath:)
中添加布局限制。
您不应该自己在该方法中实例化表格视图单元格。相反,您应该使用UITableView注册一个(可能在视图控制器的viewDidLoad()
方法中)(registerClass(_:forCellReuseIdentifier:)
或registerNib(_:forCellReuseIdentifier:)
)。
在tableView(_:cellForRowAtIndexPath:)
中,您使用dequeueReusableCellWithIdentifier(_:forIndexPath:)
来获取单元格的实例。表格视图将在您滚动时重复使用单元格,因此它不必始终创建新单元格。从本质上讲,让我们说你不会同时在屏幕上看到超过15个单元格,然后不会超过那么多实例。
现在,当您注册表视图单元格(参见上文)时,您可能应该继承UITableViewCell
,然后在代码中设置布局约束(可能会覆盖init(style:reuseIdentifier:)
),或者您可以创建.nib文件并使用它。然后,您可以通过图形用户界面在Xcode中设置约束。
如果您有任何问题,请与我们联系。
答案 2 :(得分:0)
试试这个: -
首先在你的班级中添加这两个功能
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
其次,为了使UITableViewAutomaticDimension工作,请确保已添加相对于单元格容器视图的所有左,右,底部和顶部约束。