如何在代码中处理NSLayoutConstraint冗长?

Pal*_*ndo 4 ios autolayout

我已经开始欣赏Auto Layout为我所做的工作,但我与Brent Simmons讨论的主题是不使用Interface Builder来设置约束.Apple提供的界面非常灵活,但非常冗长 - 明确设计用于代码生成器而非人工使用.对我而言,它例证了最糟糕的Objective-C,重复了过长的相同前缀,很少使用参数来模糊所有含义,而不是为代码提供清晰度.我见过Florian Kugler的FLKAutoLayout隐藏了类别中的约束创建UIView.

还有其他方法可以使代码中的布局约束更清晰,更容易理解吗?

Pal*_*ndo 9

Jonas Budelmann的砌体是用于自动布局的DSL,它比手动创建的线条和布局约束更具可读性.通过iOS Dev Weekly.

UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(superview.mas_top).with.offset(padding.top);
    make.left.equalTo(superview.mas_left).with.offset(padding.left);
    make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
    make.right.equalTo(superview.mas_right).with.offset(-padding.right);
}];
Run Code Online (Sandbox Code Playgroud)

它还具有设置边,大小和中心的复合约束:

// make top, left, bottom, right equal view2
make.edges.equalTo(view2);

// make top = superview.top + 5, left = superview.left + 10,
//      bottom = superview.bottom - 15, right = superview.right - 20
make.edges.equalTo(superview).insets(UIEdgeInsetsMake(5, 10, 15, 20))

// make width and height greater than or equal to titleLabel
make.size.greaterThanOrEqualTo(titleLabel) 

// make width = superview.width + 100, height = superview.height - 50
make.size.equalTo(superview).sizeOffset(CGSizeMake(100, -50))

// make centerX and centerY = button1
make.center.equalTo(button1) 

// make centerX = superview.centerX - 5, centerY = superview.centerY + 10
make.center.equalTo(superview).centerOffset(CGPointMake(-5, 10))
Run Code Online (Sandbox Code Playgroud)