Stevia

简洁的自动布局代码。「🍃 Concise Autolayout code」

Github星跟蹤圖

Stevia

Documentation
Language: Swift 2, 3, 4, 5 and 6
Platform: iOS 8+
Swift
Build Status
codebeat badge
License: MIT
GitHub contributors
GitHub tag

You + Stevia = 🦄

  • 💡 Write concise, readable layouts
  • 🏖 Reduce your maintenance time
  • 🎨 Compose your styles, CSS-like
  • 🔴 Plug Live reload and boost your iteration cycles

Reason - Example - Live Reload - Installation - Documentation

🖼 Visual Layout Api

layout {
    100
    |-email-| ~ 80
    10%
    |-password-forgot-| ~ 80
    >=20
    |login| ~ 80
    0
}

⛓ Chainable Api

email.top(100).left(8).right(8).width(200).height(44)
alignHorizontally(password, forgot)
image.fillContainer()
button.centerInContainer().size(50%)
equalWidths(email, password)
image.width(>=80)

📐 Equation-Based Api

email.Top == 100
password.CenterY == forgot.CenterY
login.Top >= password.Bottom + 20
login.Width == 75 % Width
(image.Height == 100).priority = UILayoutPriority(rawValue: 999)

All Generate native NSLayoutConstraints 🎉

👨‍🔬Try it!

Stevia is part of freshOS iOS toolset. Try it in an example App ! Download Starter Project

💡 Reason

Because nothing holds more truth than pure code 🤓
Xibs and storyboards are heavy, hard to maintain, hard to merge.
They split the view concept into 2 separate files making debugging a nightmare
There must be a better way

How

By creating a tool that makes Auto layout code finally readable by a human being.
By coupling it with live code injection such as injectionForXcode we can design views in real time
View layout becomes fun, concise, maintainable and dare I say, beautiful ❤️

Login View Example

In the project folder, you can find an example of a typical login view laid out in both native and Stevia for you to understand and compare the two approaches.

As a spoiler alert, the number of characters goes from 2380 to 1239 ( ~ divided by 2)

Write Half the code that is actually 10X more expressive and maintainable !

🔴 Live Reload

Live reload enables you to develop your views live without relaunching the app everytime.

Stevia + InjectionForXcode = #WhoNeedsReactNative?? 🚀

Just Cmd+S and you can dev live in the simulator !

Learn more about how to set up live reload here.

⚙️ Installation

Stevia is installed via the official Swift Package Manager.

Select Xcode>File> Swift Packages>Add Package Dependency...
and add https://github.com/freshOS/Stevia.

The Swift Package Manager (SPM) is now the official way to install stevia. The other package managers are now deprecated as of 4.8.0 and won't be supported in future versions.
For Carthage/Cocoapods support (legacy versions) see documentation here.

📖 Documentation

The following will teach you the gist of Stevia in one minute.
To go further, you can refer to the full documentation here.

Stevia enables you to write readable Auto Layout code. It does so by tackling the 3 main components of layout: view hierarchy, layout and styling.

01 - View hierarchy

email.translatesAutoresizingMaskIntoConstraints = false
password.translatesAutoresizingMaskIntoConstraints = false
login.translatesAutoresizingMaskIntoConstraints = false
addSubview(email)
addSubview(password)
addSubview(login)

becomes

subviews {
    email
    password
    login
}

02 - Layout

email.topAnchor.constraint(equalTo: topAnchor, constant: 100).isActive = true
email.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true
email.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true
email.heightAnchor.constraint(equalToConstant: 80).isActive = true

password.topAnchor.constraint(equalTo: email.bottomAnchor, constant: 8).isActive = true
password.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true
password.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true
password.heightAnchor.constraint(equalToConstant: 80).isActive = true

login.topAnchor.constraint(lessThanOrEqualTo: password.bottomAnchor, constant: 20).isActive = true
login.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
login.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
login.heightAnchor.constraint(equalToConstant: 80).isActive = true
login.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 0).isActive = true

becomes

layout {
    100
    |-email-| ~ 80
    8
    |-password-| ~ 80
    >=20
    |login| ~ 80
    0
}

03 - Styling

email.borderStyle = .roundedRect
email.autocorrectionType = .no
email.keyboardType = .emailAddress
email.font = UIFont(name: "HelveticaNeue-Light", size: 26)

becomes

email.style { f in
    f.borderStyle = .roundedRect
    f.autocorrectionType = .no
    f.keyboardType = .emailAddress
    f.font = UIFont(name: "HelveticaNeue-Light", size: 26)
    f.returnKeyType = .next
}

👨‍💻 Contributors

YannickDot, S4cha, Damien,
Snowcraft, Mathieu-o,
Blaz Merela,
Theophane Rupin,
Jason Liang,
liberty4me,
Scott Bates,
Sai,
Mike Gallagher,
WaterNotWords,
Mick MacCallum,
Onur Genes

👥 Backers

Like the project? Offer coffee or support us with a monthly donation and help us continue our activities :)

📲 Apps using Stevia

Many top-notch Apps with millions of users use Stevia to write better Auto Layout code:









You are using Stevia ? Please let me know @sachadso@gmail.com and I'll add you to the list 😍!






























🏅 Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site :)






























Swift Version

主要指標

概覽
名稱與所有者freshOS/Stevia
主編程語言Swift
編程語言Swift (語言數: 2)
平台
許可證MIT License
所有者活动
創建於2015-06-15 09:41:48
推送於2025-01-07 00:39:17
最后一次提交2025-01-06 14:39:14
發布數53
最新版本名稱6.1.0 (發布於 )
第一版名稱v0.1 (發布於 2015-10-01 10:29:35)
用户参与
星數3.4k
關注者數56
派生數214
提交數460
已啟用問題?
問題數127
打開的問題數21
拉請求數47
打開的拉請求數1
關閉的拉請求數5
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?