我能否在运行时禁用特定子视图的自动布局?

110

我有一个视图需要通过编程方式来操作它的框架 - 它是一种文档视图,可以自动包裹其内容,然后通过操作框架原点在父视图中滚动和缩放。 在运行时,自动布局会与此相冲突。

完全禁用自动布局似乎有些过于严厉,因为它可能合理地用于处理其他视图的布局。 看起来我想要的是某种“空约束”。

14个回答

0

不要禁用自动布局,而是使用替换的框架计算新的约束。这似乎是适当的方式。如果您正在调整依赖于约束的组件,请相应地进行调整。

例如,如果您在两个视图(myView和otherView)之间有一个垂直约束为0,并且您有一个平移手势或其他调整myView高度的操作,则可以使用调整后的值重新计算约束。

self.verticalConstraint.constant = newMyViewYOriginValue - (self.otherView.frame.origin.y + self.otherView.frame.size.height);
[self.myView needsUpdateConstraints];

0
对于那些正在使用自动布局的人,请查看我的解决方案这里。您应该创建要调整的约束的@IBOutlet,然后更改它们的常量。

0
这在一个没有故事板或xib文件的项目中发生了。全部都是代码写的。我在底部放了一个广告横幅,想要视图边界停在广告横幅处。视图加载后会自动调整大小。我试了这个页面上的所有解决方案,但都没用。

最终,我只是创建了一个高度缩短的子视图,并把它放在控制器的主视图中。然后,所有的内容都进入了子视图中。这样很容易地解决了问题,而且没有违背原则。

我想,如果你想要一个不是填满窗口的正常大小的视图,那么你应该使用子视图。


-16

如果是xib文件:

  1. 选择.xib文件
  2. 选择“文件所有者”
  3. 显示实用工具
  4. 单击:“文件检查器”
  5. 在“界面生成器文档”下禁用:“使用自动布局”

1
不,那会禁用整个xib的自动布局。我想要的是一种方法,只将一个特定的子视图从自动布局系统中取出。 - terriblememory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接