我将自定义UIView
放置在超级视图中,并使用简单的subclassedView.frame = computedFrame
进行调整。
它有一个UITableView
子视图,我试图使用基于约束的布局进行调整。
我基本上做了:
- (instancetype)initWithFrame:(CGRect)frame {
if ((self = [super init]) != nil) {
_tableView = [[UITableView alloc] initWithFrame:CGRectZero];
_tableView.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_tableView];
[self setNeedsUpdateConstraints];
}
return self;
}
- (void)updateConstraints {
[super updateConstraints];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_tableView
attribute:NSLayoutAttributeLeadingMargin
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeLeadingMargin
multiplier:1.0
constant:kDescriptionPadding]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_tableView
attribute:NSLayoutAttributeTopMargin
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeTopMargin
multiplier:1.0
constant:1.5 * kDescriptionPadding]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_tableView
attribute:NSLayoutAttributeTrailingMargin
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeTrailingMargin
multiplier:1.0
constant:-kDescriptionPadding]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_tableView
attribute:NSLayoutAttributeBottomMargin
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeBottomMargin
multiplier:1.0
constant:-kDescriptionPadding]];
}
现在,问题是,对于底部和右边的约束,我仍然在运行时遇到有关重复/冲突约束的错误:
"<NSAutoresizingMaskLayoutConstraint:0x7fd236d12bf0 h=--& v=--& V:[GBTViewAttachmentsCell:0x7fd236d08db0(0)]>",
"<NSLayoutConstraint:0x7fd236d14250 V:|-(2)-[UITableView:0x7fd233097e00] (Names: '|':GBTViewAttachmentsCell:0x7fd236d08db0 )>",
"<NSLayoutConstraint:0x7fd231d5f2f0 UITableView:0x7fd233097e00.bottomMargin == GBTViewAttachmentsCell:0x7fd236d08db0.bottomMargin>"
这很奇怪,因为我确实将translatesAutoresizingMaskIntoConstraints
设置为NO
。
知道我怎么能得到这些吗?我是否不允许在遗留视图中托管基于约束的布局内容,仍然只是手动设置框架?
编辑:我最初使用UILabel
执行此操作 - 这些错误发生在那里,因为UILabel有自己的概念&#34;内容大小&#34;。您可以告诉它停止或不使用底部/右侧约束。但是UITableView
在这里的合作性较低,而且内在的内容大小并不明显。