问题描述
我有一个UITableViewSubclass(样式:UITableViewCellStyleValue1),有一个自定义标签基本上是正常的为textLabel
标签的替代品。应该留下对齐正常为textLabel
,但有一个宽度结束8点到正常的左 detailTextLabel
。我得到预期的效果,但是当使用的细胞,一个异常被抛出自己无法同时满足的约束。
我不明白的是为什么它抱怨,也没有明显的冲突。调用[自我layoutIfNeeded]建立约束条件之后,沉默异常。另外,降低了配置尾随产权约束的优先级(例如, UILayoutPriorityDefaultHigh
而不是默认的 UILayoutPriorityRequired
)也沉默异常,显然是因为我通知自动布局引擎,它的好,打破/忽略约束。
我假设的标准实施的UITableView奇怪,也许勾画出为textLabel
和为textLabel
在一个时尚的使得它最初无法描述描述的视图。例如,如果为textLabel
实际上放置在小区的右侧和 detailTextLabel
放置在左侧,那么我所描述的布局是不可能的。
在没有自动布局生效,在此方案的情况下。难道是偷步并尝试之前,它应该布局的东西呢?
正在使用的任何故事板或XIBs。纯粹code为主。
#进口EBTStoreTableViewCell.h@interface EBTStoreTableViewCell()
@属性(非原子,只读,弱)的UILabel * storeNameLabel;
@结束@implementation EBTStoreTableViewCell - (ID)initWithStyle:(UITableViewCellStyle)风格reuseIdentifier:(* NSString的)reuseIdentifier
{
自= [超级initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier];
如果(个体经营){
self.textLabel.text = @; self.detailTextLabel.text = @; *的UILabel = storeNameLabel [的UILabel的alloc]初始化];
storeNameLabel.translatesAutoresizingMaskIntoConstraints = NO;
[storeNameLabel setContentCom pressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
[self.contentView addSubview:storeNameLabel];
_storeNameLabel = storeNameLabel; [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:storeNameLabel属性:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.textLabel属性:NSLayoutAttributeLeading乘数:1.0F常数:0.0];
[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:storeNameLabel属性:NSLayoutAttributeBaseline relatedBy:NSLayoutRelationEqual toItem:self.textLabel属性:NSLayoutAttributeBaseline乘数:1.0F常数:0.0]; [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:storeNameLabel属性:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.detailTextLabel属性:NSLayoutAttributeLeading乘数:1.0F常数:-8.0f]];// [自layoutIfNeeded] //这样做使问题消失
}
返回自我;
}//二传手ommited@结束
这异常消息我得到:
2014年4月23日11:50:42.092应用[32507:60B]无法同时满足约束条件。
大概在以下列表中的约束条件中的至少一个是一个你不想要的。试试这个:(1)看一下每个约束和揣摩,你不要指望; (2)找到code,它增加了不必要的约束或限制并修复它。 (注:如果你看到你不明白NSAutoresizingMaskLayoutConstraints,请参阅文档UIView的财产translatesAutoresizingMaskIntoConstraints)
(
&所述; NSLayoutConstraint:0xde03910的UILabel:0xde036b0.leading ==的UILabel:0xde00590.leading>中,
&所述; NSLayoutConstraint:0xde03a30的UILabel:0xde036b0.trailing == UITableViewLabel:0xde00c10.leading - 8>中,
< NSAutoresizingMaskLayoutConstraint:0xde01920 H = - &安培; V = - &放大器;的UILabel:0xde00590.midX ==>中,
&所述; NSAutoresizingMaskLayoutConstraint:0xde1de50 H = - &放大器; V = - &放大器; H:[的UILabel:0xde00590(0)]>中,
< NSAutoresizingMaskLayoutConstraint:0x17f50a10 H = - &安培; V = - &安培; UITableViewLabel:0xde00c10.midX ==>中
)将试图打破约束恢复
&所述; NSLayoutConstraint:0xde03a30的UILabel:0xde036b0.trailing == UITableViewLabel:0xde00c10.leading - 8是氢。打破objc_exception_throw赶上这在调试器。
在UIView的的UIConstraintBasedLayoutDebugging类别中列出的方法<的UIKit / UIView.h>也可能是有帮助的。
您应该不能混合使用匹配为textLabel
和 detailTextLabel
。因为它们的大小在内部管理,可能会产生意想不到的结果,这些不能被限制。
您应该创建自己的标签,然后放在他们的约束。
从文档的 的UITableViewCell
:
这篇关于为什么UITableViewCell中具备自动布局约束冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!