我有一个自定义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行的文本进行椭圆化处理,我需要标签尽可能多的行,并且单元格的大小也适合为标签。
答案 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
输出: