博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift4 - 动态计算UITableView中tableHeaderView的高度 - 获取子控件高度和宽度
阅读量:5975 次
发布时间:2019-06-20

本文共 4484 字,大约阅读时间需要 14 分钟。

 核心 : 

/// 获取 子控件高度    func sizeHeaderToFit(view:UIView)  {        view.setNeedsLayout()        view.layoutIfNeeded()        let width = view.systemLayoutSizeFitting(UILayoutFittingCompressedSize).width        let height = view.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height    }

  

可以参考 :

https://blog.csdn.net/longshihua/article/details/78595502

 

1. headerView 设置

import UIKitclass JYNewCardDetailHeaderV: UIView {    /// 储值卡总耗卡    let dyczkzhkLabel = UILabel(text: "储值卡总耗卡", fontSize: 16, isSetBoldFontSize: true, textColor: UIColor.init(hexColor: "424242"), textAlignment: .left)        override init(frame: CGRect) {        super.init(frame: frame)        setupUI()    }        required init?(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }        func configData(){            }}extension JYNewCardDetailHeaderV{        func setupUI() {    //VFL或者 layout设置 要把这个设置为false , snapkit 正常设置,不写的话界面也正常,就是报约束错误        self.translatesAutoresizingMaskIntoConstraints = false        let vd : [String:UIView] = ["dyczkzhkLabel":dyczkzhkLabel        vd.fastAddToView(self)        self.fastAddConstraints("|[dyczkzhkLabel]|", vd)        self.fastAddConstraints("V:|-10-[dyczkzhkLabel]-10-|", vd)    }}

  

2. 使用这个view的地方配置

import Foundationprivate let cellID = "JYNewCardDetailCell"class JYStatmentCarView: UIView {       1.  //创建headerV    let headerV = JYNewCardDetailHeaderV(frame: CGRect.zero)   //创建tableview    fileprivate lazy var tableView : UITableView = {        let tableView = UITableView.init(frame: CGRect.zero, style: .plain)        tableView.delegate = self        tableView.dataSource = self        tableView.separatorStyle = .none        tableView.register(JYNewCardDetailCell.self, forCellReuseIdentifier: cellID)        return tableView    }()            override init(frame: CGRect) {        super.init(frame: frame)        self.translatesAutoresizingMaskIntoConstraints = false        self.configUI()    }    //3.重新计算header的frame    override func layoutSubviews() {        super.layoutSubviews()        sizeHeaderToFit()    }            /// 重置 tableview的header的frame    func sizeHeaderToFit() {        let headerView = tableView.tableHeaderView                headerView?.setNeedsLayout()        // 立马布局子视图        headerView?.layoutIfNeeded()                let height = headerView?.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height ?? 0        var frame = headerView?.frame ?? CGRect.zero        frame.size.height = height        headerView?.frame = frame        // 重新设置tableHeaderView        tableView.tableHeaderView = headerView    }        required init?(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }    /// 布局UI    private func configUI() {        DDLOG(message: "创建卡相关")                let vd : [String:UIView] = ["tableView":tableView]        let metrics: [String: Any] = [ "DeviceWidth": JY_DEVICE_WIDTH]        vd.fastAddToView(self)        self.fastAddConstraints("|[tableView(DeviceWidth)]|", vd, [], metrics)        self.fastAddConstraints("V:|[tableView]|", vd, [], metrics)            //2.设置tableview的headerView, 并且一定设置headerV的约束        tableView.tableHeaderView = headerV          //VFL设置        headerV.topAnchor.constraint(equalTo: headerV.superview?.topAnchor ?? tableView.topAnchor).fastActive()        headerV.leftAnchor.constraint(equalTo: self.leftAnchor).fastActive()        headerV.rightAnchor.constraint(equalTo: self.rightAnchor).fastActive()     //snapkit 设置//        headerV.snp.makeConstraints { (make) in//            make.top.equalToSuperview()//            make.left.right.equalTo(self)//        }    }    }// MARK:- 代理extension JYStatmentCarView:UITableViewDelegate , UITableViewDataSource {    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {        return 10    }        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {        let cell = tableView .dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! JYNewCardDetailCell        cell.configData()        return cell    }        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {        return UITableViewAutomaticDimension    }        func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {        return UITableViewAutomaticDimension    }}

  

转载于:https://www.cnblogs.com/qingzZ/p/9669901.html

你可能感兴趣的文章
Linux系统中网络配置详解
查看>>
Oracle Study之--AIX RAC下OCR磁盘故障(PROT-602)
查看>>
NA-NP-IE系列实验13:使用子网地址
查看>>
raid磁盘阵列OFFLINE后的应急方案
查看>>
转载:QTableView中嵌入可视化组件
查看>>
NA-NP-IE系列实验30:CHAP 认证
查看>>
volitile关键字
查看>>
Python回顾与整理10:模块
查看>>
Python 学习笔记 - Memcached
查看>>
重视细节,方能得到认可
查看>>
《Cisco IPv6网络实现技术(修订版)》一2.6 配置练习:使用Cisco路由器配置一个IPv6网络...
查看>>
Linux 内核存缺陷:66% 安卓设备面临受攻击风险
查看>>
《可穿戴创意设计:技术与时尚的融合》一一第2章 与可穿戴设备有关的故事...
查看>>
透过微信应用号,看HTML5与Native进入融合时代
查看>>
IE 市场份额暴跌,Edge 能否守住微软的辉煌
查看>>
NGINX Plus 提供的在线活动监控功能
查看>>
客户端验证:JQuery Validation Plugin
查看>>
《Flink官方文档》示例总览
查看>>
《精通 ASP.NET MVC 5》----1.8 本书所需的软件
查看>>
《正则表达式经典实例(第2版)》——2.6 匹配完整单词
查看>>