As the error states, you must add the constraint to a view such that the views involved in the constraint are the view you're adding it to or a subview of that view. In the case of your code above, you should be adding that constraint to self
, rather than [self internalView]
. The reason it doesn't work as written is one of the views involved in the constraint (self
) is not in the view hierarchy if you consider only [self internalView]
and below).
For more details, see the discussion section of the documentation on the addConstraint:
method.
Here is your line of code, fixed as I suggest:
UIView* internalView = [[UIView alloc] initWithFrame:CGRectZero];
internalView.translatesAutoresizingMaskIntoConstraints = NO;
[self setInternalView:internalView];
[self addConstraint: [NSLayoutConstraint constraintWithItem: [self internalMapView]
attribute: NSLayoutAttributeCenterX
relatedBy: NSLayoutRelationEqual
toItem: self
attribute: NSLayoutAttributeCenterX
multiplier: 1
constant: 0]];