1

ObjectiveC を使用した以前のプロジェクトでは、セクション内の項目数に応じて動的に更新されるヘッダー テキストと、異なる背景色のセクション ヘッダーを表示する複数セクションの tableView がありました。それは完璧に機能しました。Swift を使用している新しいプロジェクトでこのコードを複製しようとしましたが、うまくいきません。ヘッダー テキストは正しく表示されますが、背景色がなく、最も重要なことは、セクション ヘッダーが各セクションの一番上のセルの上にあるのではなく、その上に重なっている点です。これは関連するコードです:

    // MARK: TableView delegates

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    if let sections = fetchedResultsController!.sections {
        return sections.count
    }
    return 0
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let sections = fetchedResultsController!.sections {
        let currentSection = sections[section]
        return currentSection.numberOfObjects
    }
    return 0
}

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView(frame: CGRectMake(0, 0, tableView.bounds.size.width, 30))
    let textHeader = UILabel(frame: CGRectMake(11, 0, 320, 20))
    switch (section) {
    case 0:
        headerView.backgroundColor = UIColor.greenColor()
    case 1:
        headerView.backgroundColor = UIColor.blueColor()
    case 2:
        headerView.backgroundColor = UIColor.redColor()
    case 3:
        headerView.backgroundColor = UIColor.purpleColor()
    default:
        break
    }
    let hText: String = "\(fetchedResultsController!.sections![section].name)"
    let hItems: String = "\((fetchedResultsController!.sections![section].numberOfObjects) - 1)"
    let headerText: String = "\(hText) - \(hItems)items"
    textHeader.text = headerText
    textHeader.textColor = UIColor.whiteColor()
    textHeader.backgroundColor = UIColor.clearColor()
    headerView.addSubview(textHeader)
    return headerView
}

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat? {
    return 20.0
}
4

2 に答える 2

3

高さが 30 であるためヘッダーがオーバーレイされ、関数で 20.0 のみが返されますheightForHeaderInSectionbreakswitch ステートメントで for each の「case」が欠落しているため、背景色は表示されません。

于 2016-04-29T09:29:34.337 に答える
0

Switch ケースは break で終了する必要があり、それからのみ backgroundcolor が返されます

以下のコードを確認してください

switch (section) {
case 0:
    headerView.backgroundColor = UIColor.greenColor()
    break
case 1:
    headerView.backgroundColor = UIColor.blueColor()
    break
case 2:
    headerView.backgroundColor = UIColor.redColor()
    break
case 3:
    headerView.backgroundColor = UIColor.purpleColor()
    break
default:
    break
}
于 2016-04-29T09:34:32.377 に答える