NSLayoutAnchor简化用法 – SugarAnchor

SugarAnchor is syntactic sugar onNSLayoutAnchorto help us write more compact, readable and easy layout code. It wraps up all ofNSLayoutXAxisAnchor,NSLayoutYAxisAnchorandNSLayoutDimensionfunctionalities under some easy to use operators to reduce verbosity.

Features

  • Simple, concise, native [1] . Almost zero learning curve
  • Typesafe, similar to NSLayoutAnchor
  • Unit tested
  • Small codebase (less than 300 LOC)

[1] Same NSLayoutAnchor/NSLayoutConstraints, just syntactic sugar on it

Example

To run the example project, clone the repo, and runpod installfrom the Example directory first.

Requirements

  • Xcode 8.3 or above
  • Swift 3.1
  • iOS 9.0 or above

Installation

SugarAnchor is available through CocoaPods . To install it, simply add the following line to your Podfile:

pod "SugarAnchor"

Operator Summary

Let’s looks at a simple NSLayoutAnchor code:

(redView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20)).isActive = true

With SugarAnchor, it become:

redView.leadingAnchor =*= view.leadingAnchor + 20

Think*as Active constraint and~as Inactive constraint . Then with=*=, you’ll create an active constraint directly or with=~=you may create an inactive constraint which you can activate later.

view1.leftAnchor =*= view2.leftAnchor + 10

// Or

let leftConstraint = (view1.leftAnchor =~= view2.leftAnchor + 10)
leftConstraint.isActive = true

In each case, you’ll get the constraint to keep or just ignore. For example, for an active one:

self.heightConstraint = (v1.heightAnchor =*= 200)
// Later somewhere
self.heightConstraint.constant = 100

Operator list

Operator Description Example
=*= Equal
(Active)
❖v1.leadingAnchor =*= v2.leadingAnchor
❖v1.leftAnchor =*= v2.leftAnchor + 20
❖v1.widthAnchor =*= v2.widthAnchor / 2 + 10
❖v1.heightAnchor =*= 200
<*= LessThanOrEqual
(Active)
❖v1.bottomAnchor <*= container.bottomAnchor – 8
>*= GreaterThanOrEqual
(Active)
❖v2.leadingAnchor >*= v1.trailingAnchor + 5
=~= Equal
(Inactive)
❖(v1.widthAnchor =~= 200).isActive = true
<~= LessThanOrEqual
(Inactive)
❖(v1.bottomAnchor <~= container.bottomAnchor – 8).isActive = true
>~= GreaterThanOrEqual
(Inactive)
❖(v2.leadingAnchor >~= v1.trailingAnchor + 5).isActive = true

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:NSLayoutAnchor简化用法 – SugarAnchor