UITableViewCell 中的 UILabel 设置为固定行数时占用额外 space
UILabel in UITableViewCell takes up extra space when set to fixed number of lines
我在 table 视图单元格中有一个标签。我已将标签设置为多行,2。但是,如果文本较大,它会占用 space,就好像它没有行限制并显示全文一样。尽管它只显示两行。
该显示标签的限制如下。所有其他元素都是从容器顶部到底部从上到下 5 个点。如果文本为2行或更少,则没有多余的space。有没有人经历过这个问题或找到了解决办法?
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
由于您有约束,因此您需要告诉 UILabel 您将在 UILabel 上处理多于 1 行。此外,当发生这种情况时,您可能需要调整 tableview cell/row 的大小,以便它们能够适应。
确保 tableview 会适应。
override func viewWillAppear(_ animated: Bool) {
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 65.0
}
解决 UILabel 问题
let subTitleLabel: UILabel = {
let label = UILabel()
label.text = "My String"
label.font = UIFont.systemFont(ofSize: 22).bold()
label.textColor = UIColor(red: 0.773, green: 0.776, blue: 0.773, alpha: 1.0)
label.numberOfLines = 0 // <---- change number of lines
label.fitTextToBounds()
label.translatesAutoresizingMaskIntoConstraints = false // <--- only if using constrains
label.textAlignment = .left
return label
就我而言,我使用此功能,如果屏幕较小,它会自动将其缩小到您设置的最小尺寸。
希望这可以帮助。
Minimum Font Size
如果你不希望你的标签增长得比预期的高。
label.setContentCompressionResistancePriority(.required, for: .vertical)
如果您正在使用 nib/storyboard。只需将 content hugging priority
更改为 1000
假设其他三个标签有numberOfLines
1.
所以这是可行的解决方案
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib..
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.estimatedRowHeight = 112
self.tableView.rowHeight = UITableView.automaticDimension
}
日期标签
约束和内容拥抱优先级
第二个标签
约束和内容拥抱优先级
标记事物
约束和内容拥抱优先级
标记最后一个 (12:00 AM)
约束和内容拥抱优先级
Result:
详细信息请参考此link
Demo Project
希望对您有所帮助。
我在 table 视图单元格中有一个标签。我已将标签设置为多行,2。但是,如果文本较大,它会占用 space,就好像它没有行限制并显示全文一样。尽管它只显示两行。
该显示标签的限制如下。所有其他元素都是从容器顶部到底部从上到下 5 个点。如果文本为2行或更少,则没有多余的space。有没有人经历过这个问题或找到了解决办法?
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
由于您有约束,因此您需要告诉 UILabel 您将在 UILabel 上处理多于 1 行。此外,当发生这种情况时,您可能需要调整 tableview cell/row 的大小,以便它们能够适应。
确保 tableview 会适应。
override func viewWillAppear(_ animated: Bool) {
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 65.0
}
解决 UILabel 问题
let subTitleLabel: UILabel = {
let label = UILabel()
label.text = "My String"
label.font = UIFont.systemFont(ofSize: 22).bold()
label.textColor = UIColor(red: 0.773, green: 0.776, blue: 0.773, alpha: 1.0)
label.numberOfLines = 0 // <---- change number of lines
label.fitTextToBounds()
label.translatesAutoresizingMaskIntoConstraints = false // <--- only if using constrains
label.textAlignment = .left
return label
就我而言,我使用此功能,如果屏幕较小,它会自动将其缩小到您设置的最小尺寸。 希望这可以帮助。
Minimum Font Size
如果你不希望你的标签增长得比预期的高。
label.setContentCompressionResistancePriority(.required, for: .vertical)
如果您正在使用 nib/storyboard。只需将 content hugging priority
更改为 1000
假设其他三个标签有numberOfLines
1.
所以这是可行的解决方案
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib..
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.estimatedRowHeight = 112
self.tableView.rowHeight = UITableView.automaticDimension
}
日期标签
约束和内容拥抱优先级
第二个标签
约束和内容拥抱优先级
标记事物
约束和内容拥抱优先级
标记最后一个 (12:00 AM)
约束和内容拥抱优先级
Result:
详细信息请参考此link Demo Project
希望对您有所帮助。