いくつかの異なるコントロールを持つビューを作成しようとしていますが、ビューを垂直方向にのみスクロールしたいと思います。自動レイアウトを使用しているので、手動でサイズを指定する必要はありません(それができることはわかっていますが、リリースノートによると私が理解していることからUIScrollView
そうする必要はありません)。
したがって、単純なView Controller(.xibファイルなし)を作成し、init
メソッドに次を追加するだけで、ラベルが折り返され(ラベルが折り返される)、ビューが垂直方向にスクロールすると予想されますが、これはそうではありません。ケース:
- (id)init {
self = [super init];
if (self) {
UIScrollView *_scrollView = [UIScrollView new];
[_scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
UILabel *label1 = [UILabel new];
UILabel *label2 = [UILabel new];
[label1 setTranslatesAutoresizingMaskIntoConstraints:NO];
[label2 setTranslatesAutoresizingMaskIntoConstraints:NO];
[label1 setNumberOfLines:0];
[label2 setNumberOfLines:0];
[label1 setPreferredMaxLayoutWidth:240];
[label2 setPreferredMaxLayoutWidth:240];
NSString *sampleText = @"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";
[label1 setText:sampleText];
[label2 setText:sampleText];
[self.view addSubview:_scrollView];
[_scrollView addSubview:label1];
[_scrollView addSubview:label2];
NSArray *constraints;
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label1]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label1)];
[_scrollView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label2]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label2)];
[_scrollView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[label1]-[label2]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label1, label2)];
[_scrollView addConstraints:constraints];
}
return self;
}
私が奇妙だと思うこのコードからのいくつかの結果があります。すべての制約を適用する必要があるメソッド(スーパーコールの後)にscrollviewheightを記録するとviewDidLayoutSubviews
、高さは0を報告します。また、幅が予想とは異なる数を報告していることも奇妙です。最初の制約のために、スーパービューの幅を報告することを期待します(必要と思われる優先順位でその制約内の幅を強制しようとしましたが、それでも機能しませんでした)。
私が理解しているように、UIScrollView
のコンテンツサイズは、そのコンテンツの固有のサイズによって設定する必要がありますが、それは起こっていないようです。
だから、誰かが欠けているものを知っていますか?