具有三个 UILabel 的自我调整大小的单元格不起作用
Posted
技术标签:
【中文标题】具有三个 UILabel 的自我调整大小的单元格不起作用【英文标题】:Self sizing cells with three UILabels not working 【发布时间】:2016-09-08 03:22:42 【问题描述】:这是我的UITableViewCell
:
三个UILabel
s 具有trailing
、top
、bottom
和leading
约束。
UILabel
名称的拥抱优先级和抗压优先级:
这是UILabel
位置的拥抱优先级和抗压优先级:
这是UILabel
类型的拥抱优先级和抗压优先级:
在我的UITableViewController
的viewDidLoad
上,我正在做这样的事情:
self.tableView.estimatedRowHeight = 80
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.reloadData()
但是当我运行应用程序时,UITableViewCell
s 不会自行调整大小:
我做错了什么或者我需要做什么才能让UITableViewCell
s 让它们自行调整大小?
编辑
我将每个UILabel
的numberOfLines
设置为0,现在UILabel
的位置不会出现
【问题讨论】:
Location UILabel 的垂直拥抱优先级比其他的低 1,介意解释一下为什么这样做吗? @Z.Hung 它在另一个项目中对我有用,但我不知道如何让它在新项目中工作 您是否尝试过更改拥抱优先级以使它们都相同? @Z.Hung 是的,我收到有关优先级的 xcode 错误 你应该把Content hugging priority vertical
增加到751,而不是阻力
【参考方案1】:
很有可能您的 Text 在运行时变大,导致单元格视图中的总高度大于行高本身。
首先将所有拥抱优先级相等,然后尝试更改具有“大于或等于”关系的标签之间的间距,然后将常数设置为较小的值,例如零。如果您仍然遇到约束错误,请增加您的 tableView 行高。
替代方法: 将所有 3 个 UILabel 添加到另一个 UIView 中,它们之间的间距为零,不要为此 UIView 设置高度约束,只需将其设置在 cellView 的 centerY 并与 ImageView 隔开
提示:即使在约束被破坏后,如果您的 UI 是您想要的,只有更改约束优先级,除非您当然知道自己在做什么
【讨论】:
【参考方案2】:你的情况不需要垂直拥抱优先,只要给
label.numberOfLines = 0
效果很好。
【讨论】:
我将所有UILabel
s 中的numberOfLines
设置为0,现在位置UILabel
没有出现【参考方案3】:
问题说您想调整标签的大小,但根据您的代码,您似乎想通过调整 tableview 行的大小来做到这一点。如果是这种情况,在 tableView 中设置行高的正确位置是:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
return 80
“return 80”表示您希望表格行的高度为 80。如果我没有正确理解您的问题,请告诉我。
【讨论】:
这对我不起作用,因为我希望UITableViewCell
能够自行调整大小【参考方案4】:
标签不起作用,因为情节提要不是很有用。
设置var
:
var imageView: UIImageView =
let image = UIImageView()
image.translatesAutoresizingMaskIntoConstraints = false
return image
()
var textView: UITextView =
let text = UITextView()
text.translatesAutoresizingMaskIntoConstraints = false
return text
()
然后你继续使用其他标签。
你必须像这个例子一样设置约束:
self.addSubview(imageView)
self.addSubview(textView)
imageView.bottomAnchor.constraintEqualToAnchor(self.bottomAnchor, constant: -10).active=true
imageView.leftAnchor.constraintEqualToAnchor(self.leftAnchor, constant:-10).active=true
imageView.widthAnchor.constraintEqualToConstant(70).active=true
imageView.heightAnchor.constraintEqualToConstant(70).active=true
label.topAnchor.constraintEqualToAnchor(self.topAnchor, constant: -5).active=true
label.leftAnchor.constraintEqualToAnchor(imageView.rightAnchor, constant: 3).active=true
label.widthAnchor.constraintEqualToAnchor(self.widthAnchor, constant -70).active=true
label.heightAnchor.constraintEqualToConstant(30).active=true
label2.topAnchor.constraintEqualToAnchor(label.bottomAnchor, constant: 5).active=true
label2.leftAnchor.constraintEqualToAnchor(imageView.rightAnchor, constant: 3).active=true
label2.widthAnchor.constraintEqualToAnchor(self.widthAnchor, constant -70).active=true
label2.heightAnchor.constraintEqualToConstant(30).active=true
并且通过这种方式也可以用于第三个标签。
【讨论】:
但我没有使用任何UITextView
@pableiros 我已经更新了答案,标签是一样的。以上是关于具有三个 UILabel 的自我调整大小的单元格不起作用的主要内容,如果未能解决你的问题,请参考以下文章