要求:
- iOS 8.0+
- Xcode 9.0+
- Swift 4.0+
安装:
- CocoaPods
pod 'SLGenericsNineView'
使用
通过泛型思想完成九宫格布局,所有边距和大小均可自定义。可传入自定义的 view 和 model。通过 map 函数完成 view 和 model 值的对应关系。只需要确定控件位置,内容尺寸会自动计算,类似于 UILabel。
1.通过 frame 布局
import SLGenericsNineView
class FrameViewController: UIViewController {
var demoView:SLGenericsNineView<CustomView,Person>!
lazy var arr:[Person] = {
return Person.getDataArr()
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
initSubviews()
}
func initSubviews(){
demoView = SLGenericsNineView(totalWidth: self.view.frame.width, map: { (view, model) in
view.nameLabel.text = model.name
view.countLabel.text = model.count
})
demoView.frame.origin = CGPoint(x: 0, y: 100)
self.view.addSubview(demoView)
demoView.dataArr = arr
}
}
2.支持 autolayout 布局
import SLGenericsNineView
class AutolayoutViewController: UIViewController {
var demoView:SLGenericsNineView<CustomView,Person>!
lazy var arr:[Person] = {
return Person.getDataArr()
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
initSubviews()
}
func initSubviews(){
demoView = SLGenericsNineView(totalWidth: self.view.frame.width, map: { (view, model) in
view.nameLabel.text = model.name
view.countLabel.text = model.count
})
self.view.addSubview(demoView)
demoView.snp.makeConstraints { (make) in
make.center.equalTo(self.view)
}
demoView.dataArr = arr
}
}
3.支持子控件 xib 加载
//CustomXibView
var demoView:SLGenericsNineView<CustomXibView,Person>!
demoView = SLGenericsNineView(totalWidth: self.view.frame.width, map: { (view, model) in
view.nameLabel.text = model.name
view.countLabel.text = model.count
})
demoView.frame.origin = CGPoint(x: 0, y: 100)
// 声明子控件从xib中加载
demoView.isCellLoadFromXib = true
self.view.addSubview(demoView)
demoView.dataArr = arr
4.其他方法
- 修改每行显示的个数
demoView.everyRowCount = 2
demoView.reLayoutSubViews()
- 刷新数据
demoView.reloadData()
- 点击事件监听
demoView.itemClicked = {(view, model, index) in
debugPrint(index)
debugPrint(view)
debugPrint(model)
}
- 修改边距
/// 上边距
public var topMargin:CGFloat
/// 左边距
public var leftMargin:CGFloat
/// 右边距
public var rightMargin:CGFloat
/// 下边距
public var bottomMargin:CGFloat
/// 设置边距
public func set(edges:CGFloat)
/// 水平间距
public var horizontalSpace:CGFloat
/// 垂直间距
public var verticalSpace:CGFloat