ios - 如何处理代码中的 NSLayoutConstraint 冗长问题?

标签 ios autolayout

我开始欣赏 Auto Layout 所做的工作对我有用,但我和 Brent Simmons 一起讨论 not using Interface Builder 的话题设置约束。 Apple 提供的界面很灵活,但极其冗长 — 显然是为代码生成器而非人类使用而设计的。对我来说,它体现了 Objective-C 的最糟糕之处,重复​​过多的相同前缀和很少使用的参数混淆了所有含义而不是使代码清晰。我看过Florian Kugler's FLKAutoLayout隐藏 UIView 类别中的约束创建。

是否有其他方法可以使代码中的布局约束更清晰、更易于理解?

最佳答案

Masonry 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);
}];

它还有用于设置边缘、大小和中心的复合约束:

// 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))

关于ios - 如何处理代码中的 NSLayoutConstraint 冗长问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17651763/

相关文章:

ios - 以编程方式从 super View 中删除 View 后更新约束/框架(自动布局)

ios - 使用值(forKey : String) gives an error

html - iPhone 模拟器中的元标记问题

ios - calayer 没有根据 tableview 单元格中的 UIView 大小而改变

ios - 使用 Xcode 场景编辑器的布局约束来布局类似于 Storyboard 的 Sprite ?

ios - ScrollView 中同时居中和滚动的约束

ios - UITextView 放置在自动布局中表现得很奇怪

ios - UITextField 右对齐 iOS 7

ios - 如何使用带有自动布局约束的动画移动 View 在 iOS 上

iOS:获取实时(ish)视频数据