Я программно создаю ограничения, чтобы представление контроллера представления имело фоновое представление и панель инструментов с панелью инструментов внизу. Я хочу, чтобы высота фонового изображения уменьшалась по мере увеличения высоты панели инструментов. После добавления фонового представления и панели инструментов в качестве подпредставлений к представлению контроллера представления я вызываю (в 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];
}
Кроме того, если я запрашиваю панель инструментов и фоновое представление об их ограничениях, ограничения между собой, которые я установил изначально, не возникают? Они показывают только для представления контроллера представления... мне это тоже не подходит...?
Большое спасибо...