名前付きのヘッダーがCollapsibleTableViewHeader
あり、その高さはに基づいて動的であり、その中UILabels
にUIViews
含まれています。
だから、私は以下にこの機能を持っています -
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
let header = self.tableView.dequeueReusableHeaderFooterViewWithIdentifier("header") as! CollapsibleTableViewHeader
switch indexPath.row {
case 0:
if sections[indexPath.section].collapsed == true {
return 0
}
else {
return header.iconsViewHeightConstraint.constant + header.shortDescHeightConstraint.constant + header.validityDateHeightConstraint.constant + header.expiryAlertHeightConstraint.constant
}
default:
return 0
}
}
私の else 条件では、ヘッダーの高さを行の高さとして返す必要があります。そこで、ヘッダー内のすべての要素を合計し、値 (CGFloat) を返しました。
高さは期待どおりに返されますが、問題は同じ高さがすべてのセルに適用されることです。たとえば、返された高さの値が 150.0 の場合、個々の高さに関係なく、同じ 150.0 がすべてのセルに適用されます。
各セルに固有の高さを取得するにはどうすればよいですか? indexPath
は重要な使用方法の 1 つですが、ここでの使用方法がわかりません。
質問がばかげている場合は、申し訳ありません!助けてください
PS:私はすでに試しautomaticDimension
ましたが、これらのセルを折りたたみ/展開可能なセルとして持っているので、とにかく役に立ちません。
viewForHeaderInSection
編集1:コードを追加
// Header
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = self.tableView.dequeueReusableHeaderFooterViewWithIdentifier("header") as! CollapsibleTableViewHeader
if sections.count == 0 {
self.tableView.userInteractionEnabled = false
header.cornerRadiusView.layer.borderWidth = 0.0
header.benefitAlertImage.hidden = true
header.benefitAlertText.hidden = true
header.amountLabel.hidden = true
}
else {
header.amountLabel.hidden = false
header.cornerRadiusView.layer.borderWidth = 1.0
self.tableView.userInteractionEnabled = true
header.titleLabel.text = sections[section].name
header.arrowImage.image = UIImage(named: "voucherDownArrow")
header.setCollapsed(sections[section].collapsed)
header.benefitDetailText2.text = sections[section].shortDesc
header.benefitDetailText3.text = sections[section].untilDate
header.section = section
header.delegate = self
if sections[section].collapsed == true {
header.benefitAlertImage.hidden = true
header.benefitAlertText.hidden = true
header.commerceIconsContainerView.hidden = true
for i in 0..<imagesArray.count {
imagesArray[i].image = UIImage(named: "")
}
}
else {
header.commerceIconsContainerView.hidden = false
if sections[section].items.count > 5 {
header.iconsViewHeightConstraint.constant = 74.0
}
else {
header.iconsViewHeightConstraint.constant = 38.0
}
if sections[section].isNearExpiration == true {
header.benefitAlertImage.hidden = false
header.benefitAlertText.hidden = false
}
else {
header.benefitAlertImage.hidden = true
header.benefitAlertText.hidden = true
}
}
}
return header
}