5

UIView は を作成しintrinsicContentSizeますか?

UIView contentView を作成します。私はそれに制約サイズを与えません:

UIView *contentView = [UIView new];
[contentView setTranslatesAutoresizingMaskIntoConstraints:NO];
contentView.backgroundColor = [UIColor orangeColor];

別の UIView subview01 を作成します。制約のサイズを指定し、contentView に追加します。

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[imageView setTranslatesAutoresizingMaskIntoConstraints:NO];
imageView.userInteractionEnabled = TRUE;
imageView.backgroundColor = [UIColor clearColor];

[imageView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView(WIDTH)]"
                                                                  options:0
                                                                  metrics:@{@"WIDTH" : [NSNumber numberWithFloat:imageSize.width]}
                                                                    views:NSDictionaryOfVariableBindings(imageView)]];

[imageView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[imageView(HEIGHT)]"
                                                                  options:0
                                                                  metrics:@{@"HEIGHT" : [NSNumber numberWithFloat:imageSize.height]}
                                                                    views:NSDictionaryOfVariableBindings(imageView)]];


[contentView addSubview:imageView];

contentView のサイズは増加しません。intrinsicContentSizeすべてのサブビューを表示してサイズを変更するために必要なサイズを計算すると思いますか? UILabel のサイズを変更してすべてのテキストを表示する方法と同じように?

4

2 に答える 2

9

いいえ、UIView には本質的な ContentSize がありません。ボタンとラベルは、文字列や画像に基づいてシステムがそのサイズを簡単に計算できるためです。UIView の場合、通常、その位置とサイズを完全に記述するには 4 つの制約が必要です。

于 2013-01-25T19:07:06.423 に答える
0

完璧な解決策ではありませんが、私は を模倣する方法を見つけintrinsicContentSizeました。

コンテナ ビューNSLayoutAttributeRightを一番右のサブ ビューに設定し、一番下のサブ ビューにNSLayoutAttributeRightも同じことを行います。NSLayoutAttributeBottomNSLayoutAttributeBottom

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self
                                                          attribute:NSLayoutAttributeRight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:rightSubView
                                                          attribute:NSLayoutAttributeRight
                                                         multiplier:1 constant:0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self
                                                          attribute:NSLayoutAttributeBottom
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:bottumSubView
                                                          attribute:NSLayoutAttributeBottom
                                                         multiplier:1 constant:0]];
于 2015-07-07T21:57:03.773 に答える