在 UINavigationBar 子类中执行“-layoutSubviews”后仍然需要自动布局

3
我有一个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?
PS:我尝试在添加约束之前调用[self layoutIfNeeded](正如其他问题中有人建议的那样),但似乎并不起作用。

那么,DDExpandableSearchBar是什么? - matt
UINavigationBar子类 - Sean Danzeiser
但我的观点是:它存在。因此,它正在做一些iOS 7不喜欢的事情。 - matt
我知道我正在努力弄清楚那到底是什么 :(. 在 iOS7 及以下版本中,我无法添加任何限制条件到 UINavigationBar。 - Sean Danzeiser
你似乎养成了这个问题的习惯:https://dev59.com/MoLba4cB1Zd3GeqPlfGm - matt
让我们在聊天中继续这个讨论 - Sean Danzeiser
1个回答

0

请确保您设置了:

[containerView setTranslatesAutoresizingMaskIntoConstraints:NO]; 

针对您的容器和子视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接