我有一个 UINavigationBar 子类,我要向其添加一些 UIView。
我的 UIView 是根据我在 -[UIView updateViewConstraints:]
中定义的约束进行布局的
NSDictionary *views, *metrics;
// search container constraints
[self addSubview:self.searchContainer];
self.searchContainer.translatesAutoresizingMaskIntoConstraints = NO;
views = NSDictionaryOfVariableBindings(_searchContainer);
metrics = @{@"h": @(SearchContainerExpandedHeight) };
self.searchContainerLeftSpacingConstraint = [NSLayoutConstraint constraintWithItem:self.searchContainer attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:xMargin];
[self addConstraint:self.searchContainerLeftSpacingConstraint];
self.searchContainerRightSpacingConstraint = [NSLayoutConstraint constraintWithItem:self.searchContainer attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeRight multiplier:1.0 constant: 0 - xMargin];
[self addConstraint:self.searchContainerRightSpacingConstraint];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-24-[_searchContainer(h)]" options:0 metrics:metrics views:views]];
//etc
在 iOS8 及更高版本上,这工作正常。在 iOS7 上,我收到以下错误:
'Auto Layout still required after executing -layoutSubviews. MyUINavigationBarSubclass's implementation of -layoutSubviews needs to call super.'
什么给了?我没有在任何地方覆盖 layoutSubviews 吗?
附言。我试过在添加约束之前调用 [self layoutIfNeeded](正如一些人在其他问题中所建议的那样),但它似乎不起作用。
最佳答案
确保您设置:
[containerView setTranslatesAutoresizingMaskIntoConstraints:NO];
用于您的容器和 subview 。
关于ios - UINavigationBar 子类上的 “Auto Layout still required after executing -layoutSubviews",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956612/