【问题标题】:Constraint added programmatically to a xib view not working约束以编程方式添加到 xib 视图不起作用
【发布时间】:2014-08-24 20:58:30
【问题描述】:

我有一个从 xib 创建的视图(self.printSettingsView)。我将此视图作为子视图添加到另一个视图(self.view)。我以编程方式添加约束如下:

[self.printSettingView setTranslatesAutoresizingMaskIntoConstraints: NO];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeLeading
                                                                 multiplier:1.0
                                                                   constant:0];
[self.view addConstraint:leftConstraint];
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                 attribute:NSLayoutAttributeTop
                                                                 relatedBy:NSLayoutRelationEqual
                                                                    toItem:self.topBar
                                                                 attribute:NSLayoutAttributeBottom
                                                                multiplier:1.0
                                                                  constant:0];
[self.view addConstraint:topConstraint];
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                   attribute:NSLayoutAttributeHeight
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeHeight
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:heightConstraint];
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                   attribute:NSLayoutAttributeWidth
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeWidth
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:widthConstraint];

除高度外,所有其他约束均生效。 我在这里做错了什么???

谢谢

【问题讨论】:

  • 不要使用外部网站分享代码,粘贴到这里。此外,最好通过屏幕截图提供一些上下文。
  • “不工作”是一个完全没用的表达。您需要说明您的代码实际做了什么,以及您期望它会做什么。

标签: ios objective-c storyboard xib


【解决方案1】:

抱歉,信息不完整。要点的问题是我在我的主视图中为子视图分配了一个约束,无论约束的常数是什么,子视图的大小都保持不变。我发现问题在于子视图又具有具有固定高度约束的组件(子视图)。我使它们与父视图的高度成比例,现在可以使用了。

【讨论】:

    【解决方案2】:

    如果不知道您的 xib 文件的限制或您期望发生的事情与正在发生的事情(屏幕截图会有所帮助),很难说。但是,我确实有一个建议,其中逻辑可能不正确。

    第二个约束是将 printViewSettings 固定在 topBar 的底部,这部分是有意义的。然而,下一个将 printViewSettings 的高度设置为其父视图的高度。这可能与您想要的不符,因为您的超级视图也包含您的 topBar,因此可能比您预期的要大。您可能真正想要的是一个将 printViewSettings 的底部固定到超级视图底部的约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      相关资源
      最近更新 更多