如何以编程方式向以编程方式创建的 UIView 添加约束?

Posted

技术标签:

【中文标题】如何以编程方式向以编程方式创建的 UIView 添加约束?【英文标题】:How to add constraints programmatically to a programmatically created UIView? 【发布时间】:2012-10-09 08:01:21 【问题描述】:

我在 viewDidLoad 中使用以下代码创建了一个 UIView(其中 'secondview' 显然是 UIView 的名称):

secondview = [[UIView alloc] initWithFrame:self.view.frame];
    [secondview setBackgroundColor: [UIColor yellowColor]];
    secondview.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:secondview];

然后在 viewDidAppear 中我为这个视图添加了约束:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:secondview attribute:NSLayoutAttributeRight
    relatedBy:NSLayoutRelationEqual
    toItem:self.view
    attribute:NSLayoutAttributeRight
    multiplier:1.0f constant:-20.0f];
[self.view addConstraint:constraint];

但是,约束并未应用于视图(至少我看不到)。相反,视图似乎只是从屏幕上消失了。但是,如果约束代码被注释掉,视图将再次加载适当的框架(显然没有应用约束)。将相同的约束应用于 Button 或 ImageView 时,约束会完美应用。这让我认为问题出在创建视图时的“initWithFrame”,因为按钮和 ImageView 实际上都不需要指定它的大小。

你的想法是什么?我应该怎么做?

【问题讨论】:

【参考方案1】:

对于遇到此问题的任何人...我需要添加多个约束。成功了。

【讨论】:

是的,这对我也有帮助。显然,您至少需要两个约束,否则视图将不会显示。 您需要尽可能多地消除歧义。这可以少至两个,但有时更多。 (例如标签至少需要两个,它可以从文本中推断出大小,但你需要给它一个 X 和 Y)

以上是关于如何以编程方式向以编程方式创建的 UIView 添加约束?的主要内容,如果未能解决你的问题,请参考以下文章

在 xib 中以编程方式自定义 UIView

如何检测以编程方式生成的 UIView 的旋转

如何以编程方式在 UIview 中制作圆角和边?

如何以编程方式创建控制器和 UIView 而不使用界面构建器? [关闭]

如何检测以编程方式生成的UIView的旋转

以编程方式从 UIView 执行 Segue