如何在没有 Interface Builder 的情况下将 UIButton 对象的中心约束到其父视图

Posted

技术标签:

【中文标题】如何在没有 Interface Builder 的情况下将 UIButton 对象的中心约束到其父视图【英文标题】:How to constraint the center of a UIButton object to its superview without Interface Builder 【发布时间】:2019-05-05 12:55:06 【问题描述】:

祝大家好运!请原谅我有点麻烦,但尽管我付出了所有努力,但我还是未能让自动布局的东西在我的代码中工作。我正在构建没有 Xcode 的 ios 应用程序,主要是在命令行上。因此,我认为它可能会导致一些与 Auto Layout 相关的问题。请在下面找到将 UIButton 对象的中心约束到其父视图的最简单尝试。

到目前为止,我已经尝试过各种布局技术,包括锚定、NSLayotConstraint constraintWithItem: 和 VFL。以上都没有对子视图的位置产生任何影响。我既没有编译也没有运行时错误。 TranslatesAutoresizingMaskIntoConstraints 已关闭。老实说,让我的代码没有按预期运行的原因让我感到震惊。更重要的是,我已经浏览了许多在线可用的自动布局示例。任何帮助将不胜感激。


  NSLayoutConstraint    *constraint;

  [aButton setTranslatesAutoresizingMaskIntoConstraints:NO];
  constraint =
    [NSLayoutConstraint
      constraintWithItem:aButton
      attribute:NSLayoutAttributeCenterX
      relatedBy:NSLayoutRelationEqual
      toItem:aButton.superview
      attribute:NSLayoutAttributeCenterX
      multiplier:1.0f
      constant:0.0f];
  constraint.active = YES;
  [aButton.superview addConstraint:constraint];
  constraint =
    [NSLayoutConstraint
      constraintWithItem:aButton
      attribute:NSLayoutAttributeCenterY
      relatedBy:NSLayoutRelationEqual
      toItem:aButton.superview
      attribute:NSLayoutAttributeCenterY
      multiplier:1.0f
      constant:0.0f];
  constraint.active = YES;
  [aButton.superview addConstraint:constraint];
```

【问题讨论】:

不要调用 addConstraint。只需将 active 设置为 YES 就足够了。 “我在没有 Xcode 的情况下构建我的 iOS 应用程序,主要是在命令行上”是什么意思? 您是否在创建和激活约束之前将按钮添加到其超级视图? @matt 非常感谢您的建议,但没有任何区别。我的意思是我只使用 clang 编译我的 iOS 项目,我也不使用 Interface Builder。 不使用Interface Builder也没关系。但是我看不出没有 Xcode 怎么能有一个 iOS 项目。 【参考方案1】:

事实证明,问题是由于我链接了错误的 SDK 而造成的。我应该使用 iPhoneSimulator12.1.sdk 而不是 iPhoneSimulator.sdk。

-isysroot $(ISYS_ROOT)
ISYS_ROOT = /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk

感谢所有努力提供帮助的人。

【讨论】:

以上是关于如何在没有 Interface Builder 的情况下将 UIButton 对象的中心约束到其父视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Interface Builder 中向 NSMenu 添加其他项目?

应该如何创建 UINavigation 工具栏子视图项 Interface Builder?

Xcode Interface Builder Style Guide - 如何添加颜色

如何在 Interface Builder 中的 UIViewController 中自动调整 UIView Outlet 的大小

如何在Xcode的Interface Builder中一次编辑多个约束

如何在具有自动布局的 Interface Builder 中创建的现有视图中添加视图?