是否可以定义相对于未知 UIViews 的自动布局约束?

Posted

技术标签:

【中文标题】是否可以定义相对于未知 UIViews 的自动布局约束?【英文标题】:Is it possible to define auto layout constraints relative to unknown UIViews? 【发布时间】:2019-04-23 20:32:59 【问题描述】:

假设我有一个 UIView 或 UIViewController 我想在整个应用程序的许多地方使用。

虽然我不知道它最终将如何显示或在哪里显示,但我知道我总是希望它的宽度是其父级的一半,并固定在右侧。

如果我想在 html/CSS 中实现类似的效果,我会应用以下样式:

.floatRight
  position: relative;
  width: 50%;
  float: right;


<div class="floatRight"> foobar </div>

我尝试过使用 NSLayoutConstraints,但据我所知,我只能指定相对于其他视图的约束,这意味着我必须提前知道我的视图将放置在哪里。

ios 中有什么方法可以让我在不提前知道父视图或周围视图的情况下指定“这个视图应该这么高并且总是尽可能远”?

【问题讨论】:

【参考方案1】:

虽然我不知道它最终会如何或在哪里显示,但我知道我总是希望它的宽度是其父级的一半,并固定在右侧。

您必须等到视图有父视图,但这并不难。使用自定义 UIView 子类。在该子类中,覆盖didMoveToSuperview,并在您的覆盖中,创建并激活约束。当你这样做时,将视图的超级视图称为self.superview!;这就是您的代码需要知道的全部内容。

【讨论】:

这会让我相对于一个未知的父母定位。如果我还想相对于未知的兄弟视图布局我的视图怎么办?例如,如果我想将 3 个子视图添加到容器视图中,以便它们最终位于水平行中。我希望定义每个子视图,以便在尊重首先插入的其他子视图的同时尽量靠近。 但这不是你问的。问题是:在 iOS 中有什么方法可以在不提前知道父视图或周围视图的情况下指定“这个视图应该这么高并且总是尽可能远”?我就是这么回答的。 是的,谢谢你。不过我也想知道这个,好像关系密切

以上是关于是否可以定义相对于未知 UIViews 的自动布局约束?的主要内容,如果未能解决你的问题,请参考以下文章

UIViews 的高度与屏幕的高度成比例(自动布局)

如何垂直自动布局 UIViews 列表,一个在彼此之上?

如何使用自动布局“项目格式约束”为 UIViews 设置相等的宽度

当我结合 UIPanGestureRecognizer 和自动布局时,我的 UIViews 搞砸了

遇到 NSLayoutConstraints 问题并以编程方式使用自动布局时,UIViews 停留在 (0,0)

设置约束与设置 UIViews 框架的优点