【问题标题】:swift autoLayout overrides CGRectMakeswift autoLayout 覆盖 CGRectMake
【发布时间】:2016-06-11 11:30:58
【问题描述】:

我没有在情节提要中定义任何约束,只是拖放了一些文本字段和按钮。我正在尝试以编程方式更新它们的大小和位置。我推荐他们IBOutlets 并尝试使用CGRectMake()viewDidLoad() 函数中更新它们。根据情节提要,我的文本字段和按钮出现在位置上。同样,这些位置是随机的,我没有定义任何约束。

有谁知道如何在不禁用 autoLayout 类的情况下解决此问题?这个项目需要做更多的工作。

【问题讨论】:

  • viewDidLoad 是操作任何布局信息的错误位置。
  • CGRectMake() 只是创建一个包含四个数字的结构。就是这样。就是这样。它不任何事情。它基本上与您的问题无关。据推测,您要告诉我们的是您正在设置视图的boundsframe 属性。这将是相关的。

标签: swift autolayout size-classes ios-autolayout cgrectmake


【解决方案1】:

如果您在情节提要中添加视图,则总是定义约束。如果不添加,编译时会自动添加。

如果你真的不希望视图没有约束,矛盾的是你必须添加它们然后检查:

对于您不想被导出的每个约束。

然后在代码中,您必须为每个此类视图将translatesAutoresizingMaskIntoConstraints 设置为true,否则其frame 将被忽略。

【讨论】:

  • 或者,你知道,关闭整个故事板文件的自动布局。
  • @ken-thomases 这有点激进 :) 大多数时候你不想完全关闭自动布局。
  • 这不是大多数时候。发问者显然不准备为这个故事板使用自动布局。这不是魔术。如果你把它关掉,你就不会受到诅咒。如果您不打算使用它,将其关闭是简单而正确的做法。像你建议的那样努力阻止它要糟糕得多。
  • @KenThomases 假设您的故事板中有 20 个视图,并且您想对其中的 2 个使用自动调整大小。然后关闭自动布局是一个非常糟糕的主意,特别是如果你想支持不同的大小类(现在这是必须的)。然后您拥有的选项是 1. 在代码中创建和设置视图 2. 使用约束作为占位符并在代码中打开自动调整大小。完全关闭自动布局是激进的,因为它会带来很多问题(标签不会有正确的框架,滚动视图不会自动设置contentSize等等)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多