添加子视图超出范围时动态调整父视图的大小

时间:2013-11-07 10:20:54

标签: ios objective-c uiview

UIView *parentView  = [[UIView alloc]initWithFrame:[CGRectMake(0,0,100,100)]];
UIView *childView  = [[UIView alloc]initWithFrame:[CGRectMake(0,120,100,100)]];
[parentView addSubview:childView];

上面的代码表示childView被添加到parentView中parentView绑定之外的位置。无论如何,我可以调整parentView的大小,以便childView不再出界?我想动态地这样做。是否有可用的自动功能,或者我必须通过计算总体大小来手动完成。

另一个问题是,在调整parentView的大小以适应childView之前,似乎在(0,100)而不是(0,120)的parentView中添加了childView,即使我设置了[parentView setClipsToBounds:NO];

3 个答案:

答案 0 :(得分:0)

您可以根据子视图框架调整父视图的大小

UIView *parentView  = [[UIView alloc]initWithFrame:[CGRectMake(0,0,100,100)]];
UIView *childView  = [[UIView alloc]initWithFrame:[CGRectMake(0,0,0,120)]];
[parentView addSubview:childView];

parentView.frame = CGRectMake(0,0,childView.frame.size.width,childView.frame.size.height);

答案 1 :(得分:0)

如果AutoLayout是您的选项,我建议您查看内在内容大小。您可以设置约束,以便根据Interface Builder中的内容(childView)调整父视图的大小。在Ray Wenderlich

上有关于AutoLayout的非常好的教程

答案 2 :(得分:0)

您可以创建自定义UIView并覆盖addSubView方法,在addSubView覆盖实现中,您可以根据需要检查要添加的子视图的大小,并调整当前视图的大小。

@implementation CustomView

- (void)addSubview:(UIView *)view {

  if(!CGSizeEqualToSize(self.view.size, view.size)) { // Sizes don't match

    // resize self.view here

  }
}

@end