Swift如何改善自动版式?

如果使用自动布局,请举手。

以编程方式举手。

如果您想要一种简单的书写方式,请举手。

有很多开源项目试图使处理自动版式变得更容易。 (即砌体,PureLayout,制图)

我在这里通过介绍DHConstraintBuilder向您展示更快捷的方法。

您可能会想,“我为什么要打扰您?”,这是一个很公平的问题。 DHConstraintBuilder可以使用最少的代码来表达约束,但又不会失去任何意义。 它可以直观地显示约束的外观,同时生成有用的约束。

假设您有两个视图,并且要在它们之间放置默认填充。 使用自动版式时,该距离通常为8像素。 下面是将DHConstraintBuilder与NSLayoutConstraint进行比较的示例。

代码看起来如何? (以下两个示例在功能上等效)

使用NSLayoutConstraint:

使用DHConstraintBuilder:

让我们分解一下:

  // 1 
-greenView和redView在水平轴上之间有15.5像素
-greenView在其超级视图的前导约束上具有默认填充
-redView在其超级视图的尾随约束上具有默认填充
  // 2 
-blueView在其超级视图的前导约束上具有默认填充
-blueView在其超级视图的尾随约束上具有默认填充
  // 3 
-greenView在其超级视图的顶部约束上具有默认填充
-greenView在垂直轴上具有与blueView的默认距离
-blueView在其超级视图的底部具有默认填充
  // 4 
-redView在其超级视图的顶部约束上具有默认填充
-redview在垂直轴上具有与blueView的默认距离
  // 5 
-greenView和redView具有相等的宽度
  // 6 
-greenview和blueView的高度相等

我可能有偏见,但是DHConstraintBuilder确实看起来更小,更简洁并且更易于阅读。 它消除了两个常见错误:忘记将translatesAutoResizingMaskIntoConstraints设置为false,以及忘记将视图添加到父视图。

可能突出的一件事是使用

  ()|-^ 
  ^-|  () 

同样,这是Visual Format对

  |- 
  -| 

不用说,但是此API面向swift3。它必须是swift,才能利用重载的运算符。

DHConstraintBuilder在GitHub上可用,并且为ios 8及更高版本。 这是我的第一个开源项目。 如果您对如何改善此问题有任何建议,请告诉我!

PS:如果这篇文章获得超过100个赞,我将写一篇有关DHConstraintBuilder卑微渊源的后续文章