我正在尝试在 UIScrollView 中创建一个容器 View ,它带有一个具有动态高度的 Controller ,并使用自动布局自动调整其大小。
View Controller A是scrollview,包含container view,下面还有更多内容。
View Controller B 是我想要具有动态大小并且所有内容都在 View Controller A 的 ScrollView 中全高显示的 View Controller 。
我在获取 B 的动态大小以自动设置 A 中容器 View 的大小时遇到了一些问题。但是,如果我在 A 中的容器 View 上设置高度约束 ,
如果 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 优先级约束。
关于ios - 在 ScrollView 中使用动态大小的 Controller 调整容器 View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35014362/