在swift

时间:2016-09-11 10:57:27

标签: ios swift uitableview custom-cell

我已经使用swift中的部分以编程方式创建了一个TableView。部分和行的数量将始终相同,因为它们只是显示我从Firebase中提取的信息。

我想将其中一个单元格的textLabel更改为顶部,而不是单元格的中间。所有其他textLabels我想保持中心。有问题的单元格是第1部分第1行。

目前看起来像:

enter image description here

我一直在寻找如何做这件事,很多人都会说:

cell.textLabel?.numberOfLines = 0
cell.textLabel?.sizeToFit()

但这不起作用。我将此代码放在cellForRowAtIndexPath方法中。

if indexPath.section == 0 {
         if indexPath.row == 0 {
            cell.textLabel!.text = "Our review"
         } else {
            cell.textLabel!.text = film?.Main_Review
            cell.textLabel?.numberOfLines = 0      // HERE
            cell.textLabel?.sizeToFit()            // HERE
         }
}

没有任何反应,文本仍然与单元格的中心对齐。

有谁知道这样做的简单方法?最好不必创建自定义单元格(因为这只需要生成1行)?感谢

更新 - cellForRowAtIndexPath

的所有代码
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: UITableViewCell = UITableViewCell(style: .Value1, reuseIdentifier: cellId)

    cell.selectionStyle = .None
    cell.textLabel?.font = UIFont(name: "Verdana", size: 14)
    cell.textLabel?.textColor = UIColor.darkGrayColor()
    cell.detailTextLabel?.font = UIFont(name: "Verdana", size: 14)


    if indexPath.section == 0 {
        if indexPath.row == 0 {
            cell.textLabel!.text = "Share"
        }
    } else if indexPath.section == 1 {
        if indexPath.row == 0 {
            cell.textLabel!.text = "Our review"
        } else {
            cell.textLabel!.text = film?.Main_Review
            cell.textLabel?.numberOfLines = 0
            cell.textLabel?.sizeToFit()
        }
    } else if indexPath.section == 2 {
        if indexPath.row == 0 {
            cell.textLabel!.text = "UK release date"
            cell.detailTextLabel!.text = film?.Date_Released?.capitalizedString
        } else if indexPath.row == 1 {
            cell.textLabel!.text = "Directed by"
            cell.detailTextLabel!.text = film?.Directed_By?.capitalizedString
        } else if indexPath.row == 2 {
            cell.textLabel!.text = "Running time"
            cell.detailTextLabel!.text = film?.Running_Time
        } else {
            cell.textLabel!.text = "Certificate rating"
            cell.detailTextLabel!.text = film?.Certificate_Rating
        }
    }

    return cell

}

2 个答案:

答案 0 :(得分:1)

cell.textLabel是UITableViewCell中的默认标签。如果您希望文本从顶部开始,则应创建UITableViewCell的子类,并为此单元格创建自己的视图。 例如

import Foundation
import UIKit

class ItemCell: UITableViewCell {

var label : UILabel!

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.label = UILabel()
    self.contentView.addSubview(label)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func layoutSubviews() {
    super.layoutSubviews()

    self.label.frame = CGRectMake(15,10,200,30)
    self.label.adjustsFontSizeToFitWidth = true
    self.label.textColor = UIColor.greenColor()

}

}

然后在你的viewController中别忘了使用像这样的寄存器类方法

    self.tableView.dataSource = self
    self.tableView.delegate = self
    self.tableView.registerClass(ItemCell.self, forCellReuseIdentifier: "cellIdentifier")

在你的cellForRowAtIndexPath

let cell:ItemCell! = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") as? ItemCell

答案 1 :(得分:0)

cell.textLabel?.sizeToFit() 

应该让你的UILabel有大小需要它来包装内容。所以你能做的好事就是改变背景,看看这条线是否能完成这项工作。 我想问题是你在细胞中的约束。您应该查看代码或故事板。 Autolayout tutorial

注意:你应该编辑你的问题,否则你可能会得到一些负面因素。如果是第0部分不能是第1部分。

    if indexPath.section == 0 {
         if indexPath.section == 1 {
          /*your code */
         }
    }