EverLayout 0.9.5

EverLayout 0.9.5

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新版本2017年11月
SwiftSwift 版本4.0
SPM支持 SPM

Dale Webster 维护。



  • 作者
  • Dale Webster

EverLayout

EverLayout 将 JSON/XML 数据转换为 iOS 结构,可以在运行时下载、重用和更新。

Carthage compatible
Pod Version
Swift Version
License MIT
Plaform

特性

  • 创建全面的布局,无需 Interface Builder 或是带有布局代码的臃肿的视图控制器。
  • 可下载的布局 - 以 JSON/XML 编写的布局可以从网络服务器下载,这意味着 App UI 可以更新,无需提交 App 审查。
  • 使用简单 HTTP 服务器(或 EverLayout Bridge)构建实时更新的布局。
  • A/B 测试 - 当布局只是加载一个文件时,测试多个 UI 与用户非常简单。

文档

更详细的文档 在这里

文档是最近为版本 0.9.3 更新的。

要求

  • iOS 8.0+
  • Xcode 8.2
  • Swift 3

安装

Cocoapods

将 EverLayout 添加到您的 Podfile

platform :ios, '8.0'
use_frameworks!
pod 'Everlayout'

Carthage

创建一个包含框架的 Cartfile 并运行 carthage update。

github "acrocat/EverLayout"

EverLayout Bridge

EverLayout Bridge 可以通过 Node Package Manager 安装。

npm install -g ever-layout-bridge

更多信息 在这里

使用示例

布局文件

{
	"name":"ViewController",
	"root":{
		"views":{
			"exampleButton":{
				"constraints":{
					"center":"@super",
					"width":"+120",
					"height":"+80"
				},
				"properties":{
					"text":"Tap Me!"
				}
			}
		}
	}
}

Swift

import UIKit
import EverLayout

class ViewController: UIViewController {
    private var layout : EverLayout?
    public let exampleButton : UIButton = UIButton()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let layoutData = NSData(contentsOfFile: Bundle.main.path(forResource: "ViewController", ofType: "json", inDirectory: "Layouts")!) as! Data
        self.layout = EverLayout(layoutData: layoutData)
        self.layout?.build(onView: self.view, viewEnvironment: self)
    }
}

桥接示例

Basic example

{
	"name":"ViewController",
	"root":{
		"views":{
			"!redSquare":{
				"constraints": {
					"width height":"+180",
					"center":"@super <24"
				},
				"properties":{
					"backgroundColor":"red"
				}
			}
		}
	}
}

我正在运行模拟器侧边的空白应用程序
以及一个由 JSON 描述的 ViewController 布局,该布局由默认的
View Controller 加载。该应用程序已连接到 EverLayout Bridge,
在每次保存布局文件时,该 Bridge 会为它提供布局更新。

在我给出的例子中,我只是更改一个 UIView 属性
以演示如何在无需重新编译应用程序的情况下设计/构建布局。

讨论

目前 EverLayout 更像一个实验,而不是一个解决方案。
这个想法是在对 Interface Builder
和现有的替代方案——笨拙的布局代码的挫败感中诞生的。

本项目的目标是找到一个中间点,既可以提供 IB 的实时“视觉”方法,
同时还可以提供用代码描述的布局的灵活性和可重用性。

进一步阅读

使用 EverLayout 构建 iOS 布局和分发

下载 iOS 布局

贡献

欢迎使用对 EverLayout 的贡献!如果您有功能请求,请提交问题,或者通过 [email protected]@greatirl 联系我。