我有一个自定义UITableViewCell,带有UIImageView和UILabel(可以是多行的)。这是IB中的所有设置,但为简单起见,这些是自动布局约束:
|-15-[imageView(80.0)]-[label]-|
|-15@500-[label]-|
V:|-[imageView(80.0)]
V:|-[label]
这个想法是,如果UIImageView出口是零,那么标签会延伸到前沿。我不确定我是否以正确的方式使用约束来执行此操作,但它似乎工作正常。
这是我的问题:在某些情况下,UILabel最终的高度超过了它的需要。例如,autolayout计算UILabel将包含两行文本,考虑到UIImageView,但是如果UIImageView不存在,那么文本实际上只适用于一行。
我读了这篇非常好的文章Advanced Auto Layout Toolbox,这篇文章有很多帮助。似乎问题涉及UILabel上的preferredMaxLayoutWidth。我按照建议在UITableViewCell上尝试了这个:
- (void)layoutSubviews
{
[super layoutSubviews];
myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width;
[super layoutSubviews];
}
但是,这还没有解决问题。一些调试表明,即使在第一次调用[super layoutSubviews]
之后myLabel.frame.size.width
总是考虑到UIImageView。但是,到显示时,UIImageView丢失,UILabel是预期的全宽(但太高)。
我希望我的解释有意义。我会发布一些图片以使其更简单,但似乎我不能这样做stackoverflow.com的新手!谢谢你的帮助。