Swift之动态适配UITableView的cell高度

  • 首先在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
    }
  效果一样:

这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╰つ栺尖篴夢ゞ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值