首页 > 解决方案 > 是否可以定义相对于未知 UIViews 的自动布局约束?

问题描述

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

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

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

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

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

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

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

标签: iosautolayoutnslayoutconstraint

解决方案


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

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


推荐阅读