HKUILayoutShorthands
Swift编程UI布局约束简写方法
介绍
如果您曾经使用Swift编程设置UI元素和布局约束,您可能会写出类似这样的代码
let myView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.addSubview(myView)
myView.translatesAutoresizingMaskIntoConstraints = false
myView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
myView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
myView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
myView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
仅为了一个元素,就有很多代码。如果您要布置一大堆元素,您的代码会变得非常长,并且很难一眼看懂。
这就是我创建这些简写方法的原因。上述代码可以简单地写成:
let myView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
myView.anchorAllFourSidesToSafeAreaOf(view)
这不是更好吗?
另一个示例
如果您只想水平垂直居中一个元素,您会写出类似这样的代码
let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
myView.addSubview(tableView)
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.centerXAnchor.constraint(equalTo: myView.centerXAnchor).isActive = true
tableView.centerYAnchor.constraint(equalTo: myView.centerYAnchor).isActive = true
使用我的快捷方式,您可以简单地写出这样的代码:
let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
myView.addSubview(tableView)
tableView.anchorAlignCenterWith(myView)
更多示例
这里有一些在其他场景中你可以做的示例
redView.anchorAlignHorizontalCentersWith(myView)
greenView.anchorAlignRightsWith(redView)
blueView.anchorSetWidthToWidthOf(someOtherView, multiplier: 0.5)
let someViewHeightConstraint =
someView.anchorSetHeightToWidthOf(anotherView)
yellowView.setHeightToConstant(200.0)
purpleView.anchorAlignLeftWithRightOf(orangeView, offset: 10.0)
insetView.anchorAlignTopGtEqToTopOf(mapView)
如你所见,这减少了代码量并提高了可读性。大多数布局约束场景都涵盖在内。请参阅单独的用户指南。
设置
运行示例应用
简单地将示例应用从 https://github.com/harrisonkong/HKUILayoutShorthandsDemo 克隆出来,然后构建并运行。
在您自己的项目中使用
您可以在项目中包含 UIView+HKUILayoutShorthands.swift 文件或者使用 CocoaPod。如果您使用 CocoaPod,不要忘记导入模块。
import HKUILayoutShorthands
自定义
文件中有许多快捷方式。您可能想要删除那些您不常用的,以减少大小和构建时间。