在具有可变框架的视图上添加子视图

Posted

技术标签:

【中文标题】在具有可变框架的视图上添加子视图【英文标题】:Adding subview on view with changeable frame 【发布时间】:2016-03-01 21:47:34 【问题描述】:

在我的应用程序中,我目前正在开发一项功能,当点击按钮时,屏幕顶部附近的视图会向下延伸以填充屏幕(边缘周围有一个间隙)。视图最初的高度约为 40 点,当展开时,它会从视图底部延伸到 20 点。

我正在尝试找出在此视图中处理 UI 的最佳方式,因为它的小型形式仅包含一个按钮和一个图像视图,但是在展开时它还包含标签、滚动视图和其他图像视图。

我应该使用 xib,然后我可以将其框架设置为与扩展视图或某种容器视图相同吗?

如果可以避免,我想避免以编程方式创建布局。

大家有什么建议吗?

【问题讨论】:

您使用的是故事板、自动布局、尺寸等级吗?这是一个可重复使用的控件还是一次性的东西 是的,故事板和自动布局。是的,我应该提到它会被多次使用(我有大约 10 个显示不同数据的按钮)。 【参考方案1】:

虽然有多种方法可以满足视觉要求,但无论您使用的是故事板还是 .xib 文件,自动布局都可能是管理所需内容的最简单方法。虽然您可以通过这种方式定义布局,但您可能需要在运行时对其进行修改。

例如,您可以为视图创建两个约束:

1) 为您的视图添加一个高度约束,其值大于或等于 40。

2) 添加一个从视图底部到视图控制器底部布局指南的垂直间距约束。将此约束设为 IBOutlet,以便稍后在代码中对其进行修改。

使用 Autolayout,您需要确保布局对于视图的大小和位置没有歧义,因此您还应该为视图的顶部、左侧和右侧的相对位置创建约束。

当适合扩展您的视图时,实现一个函数或 IBAction 来修改约束,使其 .constant 值为 20。

【讨论】:

谢谢!那肯定有帮助。我正在使用我目前拥有的东西,但我不确定它是否会起作用。它现在完美运行。我所做的与您的建议不同的唯一一件事是没有指定高度限制。

以上是关于在具有可变框架的视图上添加子视图的主要内容,如果未能解决你的问题,请参考以下文章

带有子视图的可变 UITableCellView 高度

添加到可变数组的对象数量不正确

在具有可变高度的两个视图下对齐第三个视图

可变高度子视图控制器作为 UITableView 的 tableHeaderView

具有可变模型类型的局部视图

如何在带有 Flutter 的可滚动视图中拥有具有可变高度内容的 TabView?