自我定型细胞有三个UILabel无法正常工作

时间:2016-09-08 03:22:42

标签: ios swift uitableview autolayout

这是UITableViewCell我有:

cell

这三个UILabeltrailingtopbottomleading个约束。

  • 这是UILabel名称的拥抱优先级和抗压缩优先级:

name priority

  • 这是UILabel位置的拥抱优先级和抗压缩优先级:

location priority

  • 这是UILabel类型:
  • 的拥抱优先级和压缩阻力优先级

type priority

在我viewDidLoad的{​​{1}}我做这样的事情:

UITableViewController

但是当我运行该应用时, self.tableView.estimatedRowHeight = 80 self.tableView.rowHeight = UITableViewAutomaticDimension self.tableView.reloadData() 不会自我调整大小:

result

我做错了什么或者我需要做些什么才能让UITableViewCell让他们自我调整大小?

修改

我为每个UITableViewCell设置为numberOfLines 0,现在UILabel位置不会出现

4 个答案:

答案 0 :(得分:1)

您的文本很可能在运行时变大,导致单元格视图中的总高度大于行高本身。

首先将所有拥抱优先级等同,然后尝试使用“大于或等于”关系更改标签之间的间距,然后将常量设置为小到零的值。如果仍然出现约束错误,请增加tableView行高。

替代方法: 将所有3个UILabel添加到另一个UIView中,它们之间的间距为零,不要为此UIView设置高度约束,只需将其设置在cellView的centerY中并与ImageView隔开

提示:即使在约束被破坏之后,如果您的UI是您想要的,也只更改约束优先级,除非您当然知道自己在做什么

答案 1 :(得分:1)

对于你的情况,不需要垂直拥抱优先级,只需给出

label.numberOfLines = 0

工作正常。

答案 2 :(得分:0)

问题是你想要调整标签的大小,但根据你的代码,你似乎想要通过调整tableview行的大小来实现。如果是这种情况,在tableView中设置行高的正确位置是:

  override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    return 80

}

“返回80”表示您希望表格行高度为80.如果我不理解您的问题,请告诉我。

答案 3 :(得分:-1)

标签不起作用,因为故事板不是很有用。

设置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

并且这种方式也适用于第三个标签。