我有一个视图需要通过编程方式来操作它的框架 - 它是一种文档视图,可以自动包裹其内容,然后通过操作框架原点在父视图中滚动和缩放。 在运行时,自动布局会与此相冲突。
完全禁用自动布局似乎有些过于严厉,因为它可能合理地用于处理其他视图的布局。 看起来我想要的是某种“空约束”。
我有一个视图需要通过编程方式来操作它的框架 - 它是一种文档视图,可以自动包裹其内容,然后通过操作框架原点在父视图中滚动和缩放。 在运行时,自动布局会与此相冲突。
完全禁用自动布局似乎有些过于严厉,因为它可能合理地用于处理其他视图的布局。 看起来我想要的是某种“空约束”。
不要禁用自动布局,而是使用替换的框架计算新的约束。这似乎是适当的方式。如果您正在调整依赖于约束的组件,请相应地进行调整。
例如,如果您在两个视图(myView和otherView)之间有一个垂直约束为0,并且您有一个平移手势或其他调整myView高度的操作,则可以使用调整后的值重新计算约束。
self.verticalConstraint.constant = newMyViewYOriginValue - (self.otherView.frame.origin.y + self.otherView.frame.size.height);
[self.myView needsUpdateConstraints];
最终,我只是创建了一个高度缩短的子视图,并把它放在控制器的主视图中。然后,所有的内容都进入了子视图中。这样很容易地解决了问题,而且没有违背原则。
我想,如果你想要一个不是填满窗口的正常大小的视图,那么你应该使用子视图。
如果是xib文件: