当子视图添加越界时动态调整父视图大小

Posted

技术标签:

【中文标题】当子视图添加越界时动态调整父视图大小【英文标题】:Resize Parent view dynamically when Child view is added out of bound 【发布时间】:2013-11-07 10:20:53 【问题描述】:
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 之前,似乎 childView 添加在 (0,100) 而不是 parentView 的 (0,120),即使我设置了 [parentView setClipsToBounds:NO];

【问题讨论】:

【参考方案1】:

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

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);

【讨论】:

抱歉,我的问题打错字了,我编辑了我的问题。请提出解决方案。【参考方案2】:

如果您可以选择自动布局,我建议您查看内在内容大小。您可以设置约束,以便父视图将根据 Interface Builder 中的内容(childView)调整大小。 Ray Wenderlich上有一个很好的AutoLayout教程

【讨论】:

抱歉,我的问题打错字了,我编辑了我的问题。请提出解决方案。【参考方案3】:

您可以创建自定义 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

【讨论】:

以上是关于当子视图添加越界时动态调整父视图大小的主要内容,如果未能解决你的问题,请参考以下文章

UIView 越界时隐藏子视图

父 UIViewController 调整容器视图大小时,子视图控制器不自动布局

关闭模态视图并调整父视图的大小?

iOS 8 自动布局 - 动态调整 4 个方形视图的大小

Swift - 在标签中动态调整大小后动态调整视图大小

在调整滚动视图大小时滚动到滚动视图页面