UIView 自动布局约束 wrt 父级

Posted

技术标签:

【中文标题】UIView 自动布局约束 wrt 父级【英文标题】:UIView autolayout constraints wrt parent 【发布时间】:2018-06-21 12:58:33 【问题描述】:

我有一个自定义 UIView(称为 myView),它有很多子视图。我的问题是我需要根据 myView 在其父级中的位置放置 myView 的子视图。因此,如果 myView 在屏幕的左侧,我想在 myView 的右侧放置一些元素,并且当它向左移动超出中心时,我立即希望更改 myView 的子视图的布局。有没有一种简单的方法可以使用自动布局来实现这一点?

示例:让我们在 myView 中有一个 UISlider 和两个 UIButton。如果 myView 位于其父视图的最左侧,我希望 UISlider 位于 myView 的左侧。但是如果 myView 在其父视图中移动到右侧,我想将 UISlider 移动到 myView 的右侧。

【问题讨论】:

你能用图片解释一下吗? 以编程方式添加约束对您有好处,因为您只需要这样做。 很简单,让我的视图中有一个 UISlider 和两个 UIButton。如果 myView 位于其父视图的最左侧,我希望 UISlider 位于 myView 的左侧。但是如果 myView 在其父视图中移动到右侧,我想将 UISlider 移动到 myView 的右侧。@PayalManiyar @Desdenova 我正在寻找那些约束集,程序化或故事板无关紧要。 【参考方案1】:

您将不得不通过代码来执行此操作 - 不能仅通过约束来执行此操作。

一种方法:

为“left-side-layout”创建一组约束,为“right-side-layout”创建另一组约束。然后,在运行时,确定您要使用的“版本”并仅激活适当的一组约束。

【讨论】:

没关系,但是我需要听myView的frame变化,计算我是在左边还是右边,还是有更好的出路? 这取决于myView的位置/框架是如何改变的。如果它只是响应您通过代码明确设置它,那么您可以简单地调用myView 中的一个函数来在设置它的框架后修改约束。如果myView 可以由于某些事件而移动,那么您可以创建一个观察者来观察变化,然后调用该函数。或者,您可以覆盖视图本身的框架更改。

以上是关于UIView 自动布局约束 wrt 父级的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIView 自动布局和约束

使用 UIAttachmentBehavior 和自动布局约束拖动 UIView

当父级的大小减小时,哪些自动布局约束允许子视图压缩到 0 大小?

在自定义 UIView 类 Iphone 上应用自动布局约束。

如何对 UIView 上的自动布局约束引起的大小变化做出反应?

为啥 UIView 的这些自动布局约束会阻止 UIButton 子视图接收触摸事件?