SLGenericsNineView 1.2.0

SLGenericsNineView 1.2.0

slni 维护。



  • slni

SLGenericsNineView

要求:

  • 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   

SLGenericsNineView