1
我在编程上创建约束,使视图控制器视图具有背景视图和工具栏,底部的工具栏。我希望背景视图的高度随着工具栏高度的增加而减小。在将背景视图和工具栏添加为视图控制器视图的子视图后,我调用(在viewDidLoad中)以编程方式设置约束的方法。自动布局约束不受重视
- (void)configureConstraintsForBackgroundViewAndToolbar {
[self.backgroundView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.toolbarComponent setTranslatesAutoresizingMaskIntoConstraints:NO];
UIView *constraintsBackgroundView = self.backgroundView;
UIView *constraintsToolbar = self.toolbarComponent;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(
constraintsBackgroundView,
constraintsToolbar);
NSDictionary *metricsDictionary = @{
@"toolbarHeight":[NSNumber numberWithFloat:TOOLBAR_HEIGHT]
};
[NSLayoutConstraint activateConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[constraintsBackgroundView]-(0)-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:metricsDictionary
views:viewsDictionary]];
[NSLayoutConstraint activateConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[constraintsToolbar]-(0)-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:metricsDictionary
views:viewsDictionary]];
[NSLayoutConstraint activateConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[constraintsBackgroundView]-(0)-[constraintsToolbar(>=toolbarHeight)]-(0)-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:metricsDictionary
views:viewsDictionary]];
}
这工作正常,直到我尝试使用以下方法(通过嵌入式文本视图)更新工具栏的高度。我在这里有什么不对吗?工具栏高度增加,但背景视图不缩短高度(我使用SparkInspector进行调试)。似乎很简单的说我缺少明显的东西在这里...
- (void)textViewDidChange:(UITextView *)textView {
if (textView != self.toolbarTextView) {
return;
}
CGFloat currentHeight = self.bounds.size.height;
CGSize size = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, textView.frame.size.height)];
CGFloat determinedHeight = fminf(fmaxf(size.height, TOOLBAR_HEIGHT), MAX_TOOLBAR_HEIGHT);
[self setBounds:CGRectMake(0, 0, self.bounds.size.width, determinedHeight)];
[self setNeedsLayout];
}
另外,如果我查询的工具栏和其制约因素的背景来看,对方说我已成立了最初不上来的限制?他们确实只显示视图控制器的视图...这对我来说听起来并不正确......?
非常感谢......
谢谢@Ishan Handa ...这非常有意义......我可以使用您的建议修复它...很多再次感谢... – vikram17000