如何增加特定部分中特定Cell的高度

时间:2018-06-10 17:20:55

标签: ios swift uitableview uiviewcontroller

如何在特定区域增加特定单元格(在UITableView中)的高度(在我的情况下,第二部分是使用Swift的图像)。 我不知道是否可以将我的单元格设置为自动调整大小,但目前我想要的只是增加该单元格的大小,因为我无法看到任何内部信息。 我的应用程序看起来像这样: Cell is too small

我想增加该单元格的大小,其中包含WebView。

这是我的代码:

extension DetailsViewController: UITableViewDelegate, UITableViewDataSource{

    func numberOfSections(in tableView: UITableView) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        switch section {
        case 0: return 6
        case 1: return 1
        default:
            return 0
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        switch indexPath.section{
        // Section 1: Repository Details
        case 0:

            let cell = detailsTableView.dequeueReusableCell(withIdentifier: "repoDetailsCell", for: indexPath) as! DetailsTableViewCell

            // Set each row from first section
            switch indexPath.row{

            case 0:

                cell.avatarImageView.downloadedFrom(link: "\(selectedRepo.owner.avatarURL)")

                if indexPath.row == 0{
                    self.detailsTableView.rowHeight = 60
                }

                cell.textLabel?.isHidden = true
                cell.detailTextLabel?.text = selectedRepo.description
                cell.textLabel?.numberOfLines = 0
                cell.detailTextLabel?.numberOfLines = 0
                return cell
            case 1:
                cell.textLabel?.text = selectedRepo.description
                cell.textLabel?.numberOfLines = 0
                cell.detailTextLabel?.isHidden = true
                return cell
            case 2:
                cell.textLabel?.text = "Open Issues"
                cell.detailTextLabel?.text = String(selectedRepo.openIssuesCount)
                return cell
            case 3:
                cell.textLabel?.text = "Forks"
                cell.detailTextLabel?.text = String(selectedRepo.forksCount)
                return cell
            case 4:
                cell.textLabel?.text = "Watchers"
                cell.detailTextLabel?.text = String(selectedRepo.watchersCount)
                return cell
            case 5:
                cell.textLabel?.text = "URL"
                cell.detailTextLabel?.text = selectedRepo.htmlURL
                cell.detailTextLabel?.textColor = UIColor.blue
                cell.detailTextLabel?.numberOfLines = 0
                return cell
            default:
                return cell

            }

        // Section 2: Webview
        case 1:

            let cell = tableView.dequeueReusableCell(withIdentifier: "repoWebviewCell", for: indexPath) as! DetailsTableViewCell

            // Set the WebView from Section 2
            switch indexPath.row{
            case 0:

                UIWebView.loadRequest(cell.webView)(NSURLRequest(url: NSURL(string: "\(selectedRepo.htmlURL)/blob/master/README.md")! as URL) as URLRequest)


                return cell
            default:
                return cell
            }

        default: return UITableViewCell()
        }
    }

    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 200
    }


}

2 个答案:

答案 0 :(得分:3)

实施heightForRowAt委托方法。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == someSection && indexPath.row == someRow {
        return someBiggerHeight
    } else {
        return tableView.rowHeight // return the standard height for all others
    }
}

如果您需要检查多个索引路径,那么使用switch会更容易:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    switch indexPath {
    case [someSection, someRow]:
        return someBiggerHeight
    case [someOtherSection, someOtherRow]:
        return someOtherBiggerHeight
    default:
        return tableView.rowHeight // return the standard height for all others
    }
}

答案 1 :(得分:1)

您需要实现heightForRow委托方法并为该部分的行返回适当的高度。如果您需要不同行的不同行的可变高度,那么您可以在tableview部分和行上使用switch并返回不同的值。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    switch (indexPath.section, indexPath.row) {
     case (1, 0):
         return 200
     case (0, _):
         return 60
     default: 
         return 60 //some default value
    }
}