ios - 在 ScrollView 中使用动态大小的 Controller 调整容器 View 的大小

标签 ios uiscrollview autolayout uicontainerview

我正在尝试在 UIScrollView 中创建一个容器 View ,它带有一个具有动态高度的 Controller ,并使用自动布局自动调整其大小。

Storyboard illustrating the setup

View Controller A是scrollview,包含container view,下面还有更多内容。

View Controller B 是我想要具有动态大小并且所有内容都在 View Controller A 的 ScrollView 中全高显示的 View Controller 。

我在获取 B 的动态大小以自动设置 A 中容器 View 的大小时遇到​​了一些问题。但是,如果我在 A 中的容器 View 上设置高度约束 Container View in A to for example 250 ,

如果 View Controller B 也有 250 高度,这将是预期的输出。它也适用于高度 1000,据我所知,所有自动布局约束都已正确设置。不幸的是,由于高度实际上应该是动态的,所以我想完全避免设置高度限制。

我不确定我是否可以为 View Controller B 设置任何设置以根据其内容自动更新其大小,或者我是否错过了任何其他技巧。任何帮助将不胜感激!

有没有什么方法可以在不设置高度限制的情况下,根据 View Controller B 的大小来调整 A 中的 Container View 的大小?

最佳答案

是的,有。我在自己的一个项目中设法实现了这种行为。

您所要做的就是告诉系统它不应该添加模仿 Interface Builder 中 Root View 的固定框架集的约束。执行此操作的最佳位置是在触发嵌入转场时在容器 View Controller 中:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // You might want to check if this is your embed segue here
    // in case there are other segues triggered from this view controller. 
    segue.destinationViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
}

重要:

您必须确保加载到容器中的 View 从上到下受到约束,并且您需要将其中一个垂直约束的优先级设置为低于 1000 的值。(最好始终使用这是底部约束。)这是必要的,否则 Interface Builder 会提示——有充分的理由:

在设计时,您的 Root View 具有固定大小(高度)。现在,如果您所有的 subview 都有一个固定的高度,并且连接了具有相同优先级的固定约束,则不可能满足所有这些要求,除非您的固定 Root View 的高度巧合地与您的 subview 的总高度和垂直约束完全匹配。如果将其中一个约束的优先级降低到 999,Interface Builder 知道要打破哪个约束。然而在运行时——当 translatesAutoresizingMaskIntoConstraints 属性设置为如上所述时——你的 Root View 不再有固定的框架,系统将使用你的 999 优先级约束。

Interface Builder Screenshot

关于ios - 在 ScrollView 中使用动态大小的 Controller 调整容器 View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35014362/

相关文章:

ios - 发送数据时出错

ios - xcode 4 仅在设备上复制一次资源

ios - iOS 中的 CSS 屏蔽

ios - 使用 CorePlot 绘制图形时出现问题

objective-c - 与 IB 相比,以编程方式创建 View 的效率

ios - UIScrollView 不完全滚动

ios - 部分屏幕中的 UIScrollView

ios - 当父容器 View 约束以编程方式更改时,UINavigationController subview 不调整大小

swift - 即使 ContentView 具有相同的大小,滚动 ScrollView

ios - 为什么出现键盘时键盘和 View 之间有间隙