次の構造を考慮します。
| | UIScrollView | UIScrollView | UITextField | (左側に UIScrollView、右側に UITextField)
UIScrollView に UILabel を追加し、UIScrollView を UILabel のサイズに応じて大きくしようとしています。UITextFiled は、UIScrollView の成長に応じて小さくなります。
- (IBAction)makeScrollViewGrow:(id)sender
self.myScrollView.translatesAutoresizingMaskIntoConstraints = NO;
self.myTextField.translatesAutoresizingMaskIntoConstraints = NO;
UILabel *myLabel = [[UILabel alloc] init];
myLabel.text = @"THIS IS A LONG MESSAGE";
myLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self.myScrollView addSubview:myLabel];
UITextField *theTextField = self.myTextField;
[self.myTextField removeConstraint:self.titleTextFieldWidthConstraint];
[self.myScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[myLabel]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(myLabel)]];
[self.myScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[myLabel]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(myLabel)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[theSCrollView]-8-[theTextField]-20-|" options:0 metrics: 0 views:NSDictionaryOfVariableBindings(theSCrollView, theTextField)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[theSCrollView]|" options:0 metrics: 0 views:NSDictionaryOfVariableBindings(theSCrollView)]];
}
ここでの問題は、UITextField の幅が固定されているため、UIScrollView のサイズが変更されないことです。プログラムで幅 UITextField 制約を削除すると、UIScrollView はテキスト ラベル (intrinsicContentSize) を考慮せずにすべての幅を引き継ぎます。Scrollview contentsize を手動で設定する必要がありますか、それとも autolayout を使用して自動的に設定できますか?
ありがとう