如何以编程方式设置子视图的框架以使其适合其父视图?

Posted

技术标签:

【中文标题】如何以编程方式设置子视图的框架以使其适合其父视图?【英文标题】:How to programmatically set a subview's frame to fit it inside its superview? 【发布时间】:2014-09-12 12:57:41 【问题描述】:

我需要以编程方式执行以下操作。我怎样才能做到这一点?代码应该足够动态以适应横向内的纵向视图。视图不是 UIImageViews。

【问题讨论】:

【参考方案1】:

如果您不介意在项目中包含AVFoundation 框架,可以使用:AVMakeRectWithAspectRatioInsideRect(CGSize aspectRatio, CGRect boundingRect);

它的文档指出:

返回一个按比例缩放的 CGRect,该 CGRect 在边界 CGRect 内保持 CGSize 指定的纵横比。

它可以用作:

subview.frame = AVMakeRectWithAspectRatioInsideRect(subview.bounds.size, superview.bounds);

参数:

aspectRatio:你要保持的宽高比(纵横比)。

boundingRect:你想适应的边界矩形。

【讨论】:

包含 AVFoundation 框架的缺点是什么?一些性能问题或.. 不,真的不应该有任何缺点@NerminSehic【参考方案2】:
float ratio = subView.bounds.size.height/subView.bounds.size.width;

[subView setFrame:CGRectMake(0,0,superView.bounds.size.width,superView.bounds.size.width*ratio)];
[subView setCenter:CGPointMake(superView.bounds.size.width/2,superView.bounds.size.height/2)];

【讨论】:

我喜欢您将视图居中的方式。但是您设置框架的方式不是动态的,尽管它适用于示例。

以上是关于如何以编程方式设置子视图的框架以使其适合其父视图?的主要内容,如果未能解决你的问题,请参考以下文章

嵌套堆栈视图:以编程方式附加子堆栈视图时,子堆栈视图不在其父堆栈视图内

以编程方式从其父视图中删除子视图并将其附加到其他父视图

如何在自定义视图中将子视图的框架设置为其父框架

尝试以编程方式使用嵌套的 Stack 视图制作网格

如何以编程方式为其父视图添加视图大小?

如何使 UIScrollView 在 NSLayoutConstraint 中适合其父框架?