5

UIView 是否创建一个intrinsicContentSize

我创建了一个 UIView 内容视图。我不给它限制大小:

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 没有内在内容大小。按钮和标签可以,因为系统很容易根据其中的字符串和/或图像计算该大小。对于一个 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 回答