我做什么
我正在使用swift3(来自现有的Android版本)开发IOS应用程序。 我有一个UITableView,可以有3种类型的视图(作为单元格)。一种类型是标题,另一种类型代表不同类型(小时,照片或/和材料)。 看一下下一张图片来阐明架构:
我做了什么
经过几天的研究,我尝试了很多可能的解决方案。这是他们最好的意图:
https://stackoverflow.com/a/30776750/2131420 这不是一个解决方案,因为视图的数量是静态的,我不能有随机的视图顺序(如果订单不同,应用程序崩溃...首先是视图2,然后是视图1,然后再次查看2 ...)
目前,这是最好的尝试...这包括绘制一个视图,里面有3种视图类型。每种视图类型都有一个UIView(如容器)。 然后,使用代码,使用不必要的UIView(容器)将视图的高度设置为0。 该方法的问题是细胞的自动尺寸。研究,我得到的比你可以将NSLayoutConstraints设置为隐藏的0。但是,如果你这样做,文字会被三个点(...)切断,我无法做到这一点。此外,我试图将属性lineBrake放到" WordWrap"并且行为0.这也没有解决问题。 图片示例:
问题
如何根据数组中的值将不同视图加载到单元格中?如何根据内容的高度设置这些单元格的高度?
对不起英语,并提前致谢!
答案 0 :(得分:2)
由于你需要动态单元格,我首先会为每个单元格创建3个xib,因为它们显示不同的视图并且彼此具有不同的模型。
确保单元格中项目的约束是可调整的 - 并且 - 仅当您的应用程序支持iOS 7之前的版本时 - 在tableView:heightForRowAtIndexPath:
内返回固定大小。
Heres an easy tutorial to help you understand them better.
您应该实施UITableView
委托方法
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
另外,实现tableView:estimatedHeightForRowAtIndexPath:
以便为UITableView提供估计的单元格大小。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 44
}
在UITableView
委托方法
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
//Show your first cell
}else if (model[indexPath.row].type == 1) { //or another way to distinguish from third cell
//Show your second cell
}else {
//Show your third cell
}
}
别忘了在viewDidLoad()中将自定义单元格添加到UITableView
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
self.tableView.register(UINib(nibName: "FirstCell",bundle: nil), forCellReuseIdentifier: "FirstCell")
self.tableView.register(UINib(nibName: "SecondCell",bundle: nil), forCellReuseIdentifier: "SecondCell")
self.tableView.register(UINib(nibName: "ThirdCell",bundle: nil), forCellReuseIdentifier: "ThirdCell")
}