如何使视图自动调整大小以适应superview

时间:2011-09-11 14:16:52

标签: iphone objective-c ios4

我有2个观看次数

首先是view1大小是100x100

第二个是view2大小是200 x200

我的代码是

[view1 addSubview:view2];

但view2的大小大于view1

如何使view2更小以适合view1的大小

谢谢

3 个答案:

答案 0 :(得分:3)

实现这一目标的现代方法是使用自动布局。这样,无论您的视图如何旋转或更改,它们都将保持相同的大小。

根据您的设置,它会是这样的

NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeWidth multiplier:1.f constant:0.f];

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeHeight multiplier:1.f constant:0.f];

[view1 addConstraints:@[widthConstraint,heightConstraint]];

如果您需要定位较早的操作系统,请将帧设置为相等并使用autoresizingMask

答案 1 :(得分:2)

如果你想在较小的超视图中适应更大的子视图,那么:
 1.使两个视图的size相同/相等  2.将子视图的原点设为(0,0)。由于frame属性在其超视图的坐标系中获取视图的位置,因此对于子视图原点将为(0,0)。

对于您的情况,您可以这样做:

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, view1.frame.size.width, view1.frame.size.height)];  
[view1 addSubview:view2];

OR

UIView *view2 = [[UIView alloc] initWithFrame:view1.bounds];  
[view1 addSubview:view2]; 

当您想要在较小的超级视图(UIView)中缩小较大的图像(UIImageView)时,这非常有用。

答案 2 :(得分:1)

来自UIView Class Reference

  

视图可以嵌入其他视图并创建复杂的可视层次结构。这将在嵌入的视图(称为子视图)和执行嵌入的父视图(称为超级视图)之间创建父子关系。通常,子视图的可见区域不会剪切到其超级视图的边界,但在iOS中,您可以使用clipsToBounds属性来更改该行为。父视图可以包含任意数量的子视图,但每个子视图只有一个superview,负责适当地定位其子视图。

frame property reference

  

框架矩形,用于描述视图在超视图坐标系中的位置和大小。

bounds property reference

  

边界矩形,用于描述视图在其坐标系中的位置和大小   

因此,您应该设置view1.frameview2.bounds

[view1 setBounds:CGRectMake(`x`,`y`,`width`,`height`)];

[view2 setFrame:CGRectmake(`x`,`y`,`width`,`height`)];