自动调整自定义UITableViewCell和标签中的文本

时间:2016-10-24 10:58:20

标签: ios swift uitableview uilabel

我有一个自定义UITableViewCell,其中只有一个标签。当我在StackOverflow上阅读时,我还将Interface Builder中的行数设置为0。

import UIKit

class CommonListViewCell: UITableViewCell {
    @IBOutlet var background: UIView!
    @IBOutlet var titleLabel: UILabel!
    override func awakeFromNib() {

        super.awakeFromNib()
        // Initialization code
        titleLabel.font = UIFont(name: "roboto", size: titleLabel.font.pointSize)
        NSLog("CommonListViewCell font changed")
    }    
}

以下是视图控制器与UITableView一起使用的部分:

override func viewDidLoad() {
    super.viewDidLoad()

    self.lvMain.delegate = self;
    self.lvMain.dataSource = self;
    self.lvMain.registerNib(UINib(nibName: "CommonListViewCell", bundle: nil), forCellReuseIdentifier: "commonlistidentifier")
    self.lvMain.estimatedRowHeight = 100
    self.lvMain.rowHeight =    UITableViewAutomaticDimension
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("commonlistidentifier", forIndexPath: indexPath) as! CommonListViewCell

    // Configure the cell...
    cell.titleLabel?.text = prayerList[indexPath.row].name
    cell.titleLabel?.sizeToFit()
    setLabelFont(cell.titleLabel!)
    Utils.nightCheck([cell.titleLabel!])
    return cell
}

所以,.sizeToFit()并没有改变任何东西 - 它仍然会对1行的文本进行椭圆化处理,我需要标签尽可能多的行,并且单元格的大小也适合为标签。

2 个答案:

答案 0 :(得分:1)

您需要使用自定尺寸单元格。

tableView.estimatedRowHeight = 100
 tableView.rowHeight =    UITableViewAutomaticDimension

在storyboard或xib中,您必须确保在单元格中设置适当的约束。 不要在标签中设置预定义的高度约束。只需确保给出顶部和底部约束。如果您不确定文本,还可以为标签提供最小高度约束。

答案 1 :(得分:0)

试用此代码:

注意:两种方法都应该有效。测试Swift 3。

方法1:

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

tableView.estimatedRowHeight = 44.0 // standard tableViewCell height
tableView.rowHeight = UITableViewAutomaticDimension

return yourArrayName.count
}

方法2:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}

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

注意:您需要将此代码放入cellForRowAt

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

输出:

enter image description here