我希望有一个包含2个单元格的tableview。
一个带有增加高度的标签和一个没有该标签的标签。用户将内容添加到此tableview(有点像待办事项列表),如果用户选择了一个选项,则标签在他们添加的新项目的tableviewcell中可见,但如果他们没有选择该选项,那么他们添加没有该标签的tableviewcell。无论如何,我可以选择何时显示带有标签的单元格。
我首先想到的是,如果未选择该选项,只会使标签不可见,但这会影响其他标签的高度和约束。
是否可以创建具有不同标识符的2个不同单元格,并根据是否选择了该选项来调用要添加的单元格。
根据解决方案,我尝试在两个不同的单元格之间切换,这是我的代码。
if newMode==true{
let cell = tableView.dequeueReusableCell(withIdentifier: "monthlyCell", for: indexPath) as! MonthlyExpenseTableViewCell
let screenSize: CGRect = UIScreen.main.bounds
cell.dateLabelBackground.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: 31)
cell.dateLabel.text = dateString
cell.expenseName2.text = expense.name
cell.expenseAmount2.text = finalDisplayed
cell.expenseCategory2.text = expense.category
cell.expenseCollection2.text = expense.collection
if (expense.expense) {
cell.expenseAmount2.textColor = UIColor.red
}
else if (expense.income){
cell.expenseAmount2.textColor = UIColor.green
}
if (expense.cash) && (expense.expense){
cell.cashOrCredit.image = #imageLiteral(resourceName: "Cash-Expense Icon")
}
else if (expense.cash) && (expense.income){
cell.cashOrCredit.image = #imageLiteral(resourceName: "Cash-Income Icon")
}
else if (expense.credit) && (expense.income){
cell.cashOrCredit.image = #imageLiteral(resourceName: "Credit-Income Icon")
}
else if (expense.credit) && (expense.income){
cell.cashOrCredit.image = #imageLiteral(resourceName: "Credit-Expense Icon")
}
}
else if newMode==false{
let cell = tableView.dequeueReusableCell(withIdentifier: "monthlyCell2", for: indexPath) as! MonthlyExpenseTableViewCellShort
cell.expenseName3.text = expense.name
cell.expenseAmount3.text = finalDisplayed
cell.expenseCategory3.text = expense.category
cell.expenseCollection3.text = expense.collection
if (expense.expense) {
cell.expenseAmount3.textColor = UIColor.red
}
else if (expense.income){
cell.expenseAmount3.textColor = UIColor(red:0.49, green:0.83, blue:0.13, alpha:1.0)
}
if (expense.cash) && (expense.expense){
cell.cashOrCredit3.image = #imageLiteral(resourceName: "Cash-Expense Icon")
}
else if (expense.cash) && (expense.income){
cell.cashOrCredit3.image = #imageLiteral(resourceName: "Cash-Income Icon")
}
else if (expense.credit) && (expense.income){
cell.cashOrCredit3.image = #imageLiteral(resourceName: "Credit-Income Icon")
}
else if (expense.credit) && (expense.income){
cell.cashOrCredit3.image = #imageLiteral(resourceName: "Credit-Expense Icon")
}
}
return cell
}
这个问题是,它只是出于某种原因一次只返回单元格。当我删除单元格时,它会显示下一个单元格。
以下是我设置布尔值“newMode”
的代码if indexPath.row == 0{
newMode = true
}
if indexPath.row>1{
let previousExpensesData = monthlyExpenses[indexPath.row - 1].modificationDate
let day = Calendar.current.component(.day, from: expense.modificationDate as! Date) // Do not add above 'date' value here, you might get some garbage value. I know the code is redundant. You can adjust that.
let previousDay = Calendar.current.component(.day, from: monthlyExpenses[indexPath.row - 1].modificationDate! as Date)
if day == previousDay {
newMode = false
} else {
newMode = true
}
}
对于我的heightForRowAtIndexPath,我使用此代码
func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat
{
if newMode==true {
return 95
}
else if newMode==false {
return 64
}
else {
return 0
}
}
这是numberOfRows的代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if monthlyExpenses.count == 0{
noExpenseLabel.isHidden = false
}
return monthlyExpenses.count
}
以下是2个单元格的样子
答案 0 :(得分:0)
实际上你不需要两个不同的细胞。正如您在问题中所说:“我首先想到的是,如果未选择该选项,只会使标签不可见,但这会影响其他标签的高度和约束。”
只需使用一个单元格。
现在要克服这个问题,在这个stackView中使用UIStackView.Put标签。为stackView提供适当的约束。并根据您的选项隐藏/取消隐藏标签。 UIStackView将为您完成这些任务。 :)
它会根据您的需要提供结果。有关UIStackView的更多信息,请阅读Raywenderlich的this awesome tutorial。
编辑:根据您的评论
我创建了一个像这样的单元格。
我像这样管理了那个单元格的所有子视图..
我刚在cellForRow
cell.label.isHidden = indexPath.row % 2 == 1
我得到了输出....