我有一个UITableView,它代表带有动态UI单元的问卷。我已经创建了2个单元格。 第一个UI单元需要始终处于顶部(如标题/标题),而第二个UI单元则必须是动态的(这意味着第二个UI单元可以显示10或20个问题)。有什么办法吗?
我已经为两个UI单元创建了一个UITableViewCell,并且我链接了所有组件。 现在,我不知道在何处指定将单元格0返回1次并将单元格1返回X次。 还有如何始终将单元0保持在顶部?
这是我的代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.row {
// Static cell - Checks Left
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: "checksLeftCell", for: indexPath) as! ChecksLeftTableViewCell
return cell
// Dynamic cell - Questions
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: Constants.defectAndDamageCell, for: indexPath) as! DefectAndDamageCheckCell
cell.configCell()
cell.delegate = self
return cell
default:
return UITableViewCell()
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
switch indexPath.row {
case 0: return 100
case 1: return 400
default:
return 170
}
}
我希望顶部有“冻结”单元格,第二个是动态单元格。
谢谢您的阅读,希望我能很好地解释一下我的想法。
答案 0 :(得分:1)
这并不是对设计进行认真思考的标志。看来您根本不需要UITableView
。您可以对每个组件使用基本的UIView
来获得更好的结果,例如标题,问题详细信息,标签等。
您可以使用UIStackView
帮助自己。
答案 1 :(得分:0)
您可以使用带有内部自定义视图的节标题代替静态单元格:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let nameLabel = UILabel(frame: CGRect(x: 10, y: 0, width: tabelView.frame.width, height: 40))
nameLabel.text = //
nameLabel.font = taskNameLabel.font.withSize(14)
//Or add whatever you need here
let sub = UIView(frame: CGRect(x: 0, y: 0, width: tabelView.frame.size.width, height: 40))
sub.backgroundColor = .white
sub.addSubview(NameLabel)
return sub
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: Constants.defectAndDamageCell, for: indexPath) as! DefectAndDamageCheckCell
cell.configCell()
cell.delegate = self
return cell
}
答案 2 :(得分:0)
我会尝试使用UICollectionView而不是tableview。 在UICollectionView中,使用UICollectionViewDelegateFlowLayout委托。
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { #your code for header view }
https://developer.apple.com/documentation/uikit/uicollectionviewdatasource/1618037-collectionview
或
在TableView中创建节标题,并在其中创建自定义视图。
因此,您的TableView将具有1个节标题和1行。
祝你好运。
答案 3 :(得分:0)
有很多解决方法。
如果您希望将粘贴放在顶部的静态视图,请尝试以下操作:
将UIViewController
子类化,并在顶部/前导/尾随处添加容器UIView
。将标题标签和内容嵌入到内容视图中。接下来,添加一个UITableView
并将其固定在超级视图的开头/结尾/底部。使视图控制器成为数据源和委托。
通过这种方式,您仍然可以在表视图中滚动,并且可以在将静态标头内容作为IBOutlets管理时,根据需要重新加载单元格。
如果将选择的答案与堆栈视图一起使用,则当内容长于屏幕尺寸时,必须通过将堆栈视图嵌入UIScrollView
中来实现滚动解决方案。您可能应该只使用tableview,因为该行为是继承的。