Swift之動態適配UITableView的cell高度
阿新 • • 發佈:2019-02-11
- 首先在Xib中拖一個UITableView,讓其充滿整個檢視控制器,並遵守實現UITableViewDelegate,UITableViewDataSource協議;
- 其次,新建一個繼承於UItableViewCell的自定義表格單元格的類,在xib中拖拽一個UILabel,新增好相應的約束,讓其居中顯示,並將Label的numberOfLines置為0(注意:這裡需要設定Lable的寬度,我設定得為320);
@IBOutlet weak var myTableView: UITableView!
let identifier:String = "myTableViewCellIdentifier"
let textArray:NSArray = [ "關雎\n關關雎鳩,在河之洲。\n窈窕淑女,君子好逑。\n參差荇菜,左右流之。\n窈窕淑女,寤寐求之。\n求之不得,寤寐思服。\n悠哉悠哉,輾轉反側。\n參差荇菜,左右采之。\n窈窕淑女,琴瑟友之。\n參差荇菜,左右芼之。\n窈窕淑女,鐘鼓樂之。","春江花月夜\n春江潮水連海平,海上明月共潮生。\n灩灩隨波千萬裡,何處春江無月明。\n江流宛轉繞芳甸,月照花林皆似霰。\n空裡流霜不覺飛,汀上白沙看不見。\n江天一色無纖塵,皎皎空中孤月輪。\n江畔何人初見月?江月何年初照人?\n人生代代無窮已,江月年年望相似。\n不知江月待何人,但見長江送流水。\n白雲一片去悠悠,青楓浦上不勝愁。\n誰家今夜扁舟子?何處相思明月樓?\n 可憐樓上月裴回,應照離人妝鏡臺。\n玉戶簾中卷不去,搗衣砧上拂還來。\n此時相望不相聞,願逐月華流照君。\n鴻雁長飛光不度,魚龍潛躍水成文。\n昨夜閒潭夢落花,可憐春半不還家。\n江水流春去欲盡,江潭落月復西斜。\n斜月沉沉藏海霧,碣石瀟湘無限路。\n不知乘月幾人歸,落月搖情滿江樹。","詠早梅\n兔園標物序,驚時最是梅。\n銜霜當路發,映雪擬寒開。\n枝橫卻月觀,花繞凌風臺。\n朝灑長門泣,夕駐臨邛杯。\n應知早飄落,故逐上春來。","水調歌頭\n明月幾時有?把酒問青天。\n不知天上宮闕,今夕是何年。\n我欲乘風歸去,又恐瓊樓玉宇,高處不勝寒。\n起舞弄清影,何似在人間?\n轉朱閣,低綺戶,照無眠。\n 不應有恨,何事長向別時圓?\n人有悲歡離合,月有陰晴圓缺,此事古難全。\n但願人長久,千里共嬋娟"]
override func viewDidLoad() {
super.viewDidLoad()
self.title = "古詩詞賞析"
setupTableView()
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return textArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell:PoemTableViewCell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! PoemTableViewCell
if cell .isEqual(nil) {
cell = PoemTableViewCell.init(style: .default, reuseIdentifier: identifier)
}
cell.showLabel.text = textArray[indexPath.row] as? String
return cell
}
func setupTableView() {
self.myTableView.register(UINib.init(nibName: "PoemTableViewCell", bundle: nil), forCellReuseIdentifier: identifier)
}
- 最後,只需要在viewDidLoad中設定UITableView的兩個屬性estimatedRowHeight和rowHeight即可;
func setupTableView() {
self.myTableView.tableFooterView = UIView()
self.myTableView.register(UINib.init(nibName: "PoemTableViewCell", bundle: nil), forCellReuseIdentifier: identifier)
self.myTableView.estimatedRowHeight = 60
self.myTableView.rowHeight = UITableViewAutomaticDimension
}
- 附上我的效果圖:
- 當你需要顯示的內容較短的時候,還可以用另外一種方式實現:即為實現UITableView的tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat這個協議:
let textString:NSString = "關關雎鳩,在河之洲。\n窈窕淑女,君子好逑。\n參差荇菜,左右流之。\n窈窕淑女,寤寐求之。\n求之不得,寤寐思服。\n悠哉悠哉,輾轉反側。\n參差荇菜,左右采之。\n窈窕淑女,琴瑟友之。\n參差荇菜,左右芼之。\n窈窕淑女,鐘鼓樂之。"
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let attribute = [NSShadowAttributeName:UIFont.systemFont(ofSize: 15)]
return textString.boundingRect(with: CGSize.init(width: 300, height: 0), options: .usesDeviceMetrics, attributes: attribute, context: nil).size.width+10
}
效果一樣: