SizeClasses 0.4.0

SizeClasses 0.4.0

Vincent Flecke 维护。



  • Vincent Flecke

SizeClasses

CI Status Carthage compatible Version License Platform

SizeClasses 允许你适应程序化布局的大小类别变化 - 在编写代码时使用故事板的优势!

使用

让我们从几个例子开始

// Base layout is the same in every size class
when(.any, .any, activate: [
    label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])

// Use up the whole screen width in compact horizontal sizes
when(.compact, .any, activate: [
    label.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor),
    view.readableContentGuide.trailingAnchor.constraint(equalTo: label.trailingAnchor)
])

// Use only half of the readable content width in regular horizontal sizes
when(.regular, .any, activate: [
    label.centerXAnchor.constraint(equalTo: view.readableContentGuide.centerXAnchor),
    label.widthAnchor.constraint(equalTo: view.readableContentGuide.widthAnchor, multiplier: 0.5)
])

// Left align label in compact horizontal sizes
when(.compact, .any) {
    label.textAlignment = .left
}

// Center align label in regular horizontal sizes
when(.regular, .any) {
    label.textAlignment = .center
}

设置

仍然感兴趣?在任何 UITraitEnvironment (UIViewController, UIView, 等) 中采用 SizeClasses 协议,并添加以下片段

class MyViewController: UIViewController, SizeClasses {

    let sizeClassesManager = SizeClassesManager()

    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        traitCollectionDidChange()
    }

}

在布局中使用

SizeClasses 目前支持 NSLayoutConstraint 和闭包。

类似于 Xcode 的故事板,有三个大小类别选项可供选择

public enum UserInterfaceSizeClassPredicate {
    case any
    case compact
    case regular
}

SizeClasses 协议为其实例添加了几个辅助函数

func when(_ horizontalSizeClass: UserInterfaceSizeClassPredicate, _ verticalSizeClass: UserInterfaceSizeClassPredicate, activate constraints: [NSLayoutConstraint])

func when(_ horizontalSizeClass: UserInterfaceSizeClassPredicate, _ verticalSizeClass: UserInterfaceSizeClassPredicate, do action: @escaping () -> Void) -> Any

func remove(constraint: NSLayoutConstraint)

func remove(actionWith identifier: Any)

查看代码文档以获取更多详细信息。

安装

SizeClasses 通过 Carthage 提供。要安装它,只需将以下行添加到 Cartfile 中即可。

github "Eckelf/SizeClasses"

SizeClasses 可通过 CocoaPods 使用。要安装它,只需将以下行添加到您的 Podfile 中

pod "SizeClasses"

作者

Vincent Flecke,[email protected]

许可证

SizeClasses 在 MIT 许可证下提供。更多信息请参阅 LICENSE 文件。