테이블 이미지 상단 뷰
기본 테이블
- 이미지 -
이미지 | 제목
| 날짜
- seperate -
1.테이블 뷰를 생성한다.
테이블뷰의 estimatedRowHeight는 예상되는 높이(나중에 동적으로 변경되기때문에 어림잡아 세팅하면 됨)
테이블뷰의 rowHeight는 반드시 UITableViewAutomaticDimension로 설정해야된다.
이미지 비율을 폰크기 마다 변경하고 싶다면 폰의 비율에 따라 이미지 높이를 동적으로 잡아주면 된다.
rowHeight가 UITableViewAutomaticDimension이기때문에 자동으로 이미지 높이가 수정된다.
import UIKit
class TableView3Controller: UIViewController {
var didSetupConstraints = false
let cellName = "tableview3cell"
let tableView: UITableView = {
let tableView = UITableView()
return tableView
}()
let dummyList: [TableView3Model] = [
TableView3Model(name: "test1", imageUrl: "https://lorempixel.com/100/101/", date: "2017-01-12 12:12:11", userImageUrl: "https://lorempixel.com/50/50/"),
TableView3Model(name: "test2", imageUrl: "https://lorempixel.com/100/102/", date: "2017-01-12 12:12:11", userImageUrl: "https://lorempixel.com/51/50/"),
TableView3Model(name: "test3", imageUrl: "https://lorempixel.com/100/103/", date: "2017-01-12 12:12:11", userImageUrl: "https://lorempixel.com/50/52/"),
TableView3Model(name: "test4", imageUrl: "https://lorempixel.com/100/104/", date: "2017-01-12 12:12:11", userImageUrl: "https://lorempixel.com/52/50/"),
]
override func viewDidLoad() {
super.viewDidLoad()
self.initUI()
self.initTableView()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
static func instance() -> TableView3Controller {
let vc = TableView3Controller ()
return vc
}
}
extension TableView3Controller: UITableViewDelegate, UITableViewDataSource {
public func initTableView() {
self.tableView.dataSource = self
self.tableView.delegate = self
self.tableView.separatorStyle = .none
self.tableView.estimatedRowHeight = 212.0
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.register(TableView3Cell.self, forCellReuseIdentifier: self.cellName)
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.dummyList.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
-> UITableViewCell {
let cell: TableView3Cell = tableView.dequeueReusableCell(withIdentifier: self
.cellName) as! TableView3Cell
cell.bind(model: self.dummyList[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
}
//snapkit
extension TableView3Controller {
func initUI() {
self.view.addSubview(self.tableView)
view.setNeedsUpdateConstraints()
}
override func updateViewConstraints() {
if (!didSetupConstraints) {
tableView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
didSetupConstraints = true
}
super.updateViewConstraints()
}
}
2.모델은 단순하게 생성한다.
import Foundation
struct TableView3Model{
var name:String?
var imageUrl:String?;
var date:String?;
var userImageUrl:String?;
init(name:String,imageUrl:String,date:String,userImageUrl:String) {
self.name = name
self.imageUrl = imageUrl
self.date = date
self.userImageUrl = userImageUrl
}
}
3.가장 중요한 UITableviewCell을 생성한다.
import UIKit
import SnapKit
import Kingfisher
class TableView3Cell: UITableViewCell {
var userView: UIView = {
let view = UIView()
return view
}()
var seperateView:UIView = {
let view = UIView()
view.backgroundColor = UIColor.gray
return view
}()
let imageUrl: UIImageView = {
let imgView = UIImageView()
imgView.layer.borderColor = UIColor.gray.cgColor
imgView.layer.borderWidth = 0.0
return imgView
}()
let userImage: UIImageView = {
let imgView = UIImageView()
imgView.layer.borderColor = UIColor.gray.cgColor
imgView.layer.borderWidth = 1.0
return imgView
}()
var userName: UILabel = {
let label = UILabel()
label.font = .systemFont(ofSize: 15)
label.textColor = .red
return label
}()
var date: UILabel = {
let label = UILabel()
label.font = .systemFont(ofSize: 14)
label.textColor = .black
label.numberOfLines = 1
return label
}()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupUI()
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
func bind(model: TableView3Model) {
self.userName.text = model.name
self.date.text = model.date
self.userImage.kf.setImage(with:URL(string: model.userImageUrl!))
self.imageUrl.kf.setImage(with:URL(string: model.imageUrl!))
}
}
extension TableView3Cell {
func setupUI() {
self.contentView.backgroundColor = UIColor.gray
self.addSubview(self.seperateView)
self.addSubview(self.imageUrl)
self.addSubview(self.userView)
self.userView.backgroundColor = UIColor.white
self.userView.addSubview(self.userName)
self.userView.addSubview(self.userImage)
self.userView.addSubview(self.date)
//imageurl
imageUrl.snp.makeConstraints({ (make) in
make.top.equalTo(0)
make.left.right.equalTo(0)
make.height.equalTo(150)
make.bottom.equalTo(userView.snp.top)
})
//userview
userView.snp.makeConstraints({ (make) in
make.top.equalTo(imageUrl.snp.bottom)
make.left.right.equalTo(0)
make.bottom.equalTo(seperateView.snp.top)
make.height.equalTo(52)
})
//seperateView
seperateView.snp.makeConstraints({ (make) in
make.top.equalTo(userView.snp.bottom)
make.left.right.equalTo(0)
make.bottom.equalTo(0)
make.height.equalTo(10)
})
//userimage
userImage.snp.makeConstraints({ (make) in
make.top.left.equalTo(6)
make.width.height.equalTo(40)
})
//username
userName.snp.makeConstraints { (make) in
make.top.equalTo(5)
make.left.equalTo(userImage.snp.right).offset(10)
make.right.equalTo(-10)
make.height.equalTo(19)
}
//date
date.snp.makeConstraints { (make) in
make.top.equalTo(userName.snp.bottom).offset(5)
make.left.equalTo(userImage.snp.right).offset(10)
make.right.equalTo(-10)
make.bottom.equalTo(-5)
make.height.equalTo(18)
}
}
}
setupUI 에서 엘리먼트의 위치와 크기를 잡아둔다.
결과화면
https://github.com/choiks14/SnapkitTest
'swift > snapkit' 카테고리의 다른 글
| snapkit(10) (0) | 2017.06.25 |
|---|---|
| snapkit(9) (0) | 2017.06.25 |
| snapkit(7) (0) | 2017.06.25 |
| snapkit(6) (0) | 2017.06.25 |
| snapkit(5) (0) | 2017.06.18 |