translatesAutoresizingMaskIntoConstraints = NO,仍然得到NSAutoresizingMaskLayoutConstraint错误

时间:2016-02-03 20:07:22

标签: ios cocoa-touch uikit

我将自定义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在这里的合作性较低,而且内在的内容大小并不明显。

0 个答案:

没有答案