今天做一个APP里面设置页面(个人中心) 就是一个列表菜单 顶部是一个头像和账户标题, 底部为一个退出登录按钮

当然我第一时间就想到了UITableView, HeaderView, FooterView

// 我创建了两个类文件, 用来做UITableView 的header, footer
class SettingHeaderView: UIView {
//里面的布局是采用 SnapKit 布局
}
class SettingFooterView: UIView {
}

  

期初我是这样写的, 但是运行就报错了

override func viewDidLoad() {
super.viewDidLoad() //1.创建header,footerView
let headView = SettingHeaderView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 120))
let footerView = SettingFooterView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 150))      //2.赋值给UITableView
self.tableView.tableHeaderView = headView
self.tableView.tableFooterView = footerView self.tableView.dataSource = self
self.tableView.delegate = self self.view.addSubview(self.tableView)
self.tableView.mas_makeConstraints { (maker) in maker?.top.equalTo()(self.mas_topLayoutGuide)
maker?.left.right()?.equalTo()(self.view)
maker?.bottom.equalTo()(self.view.mas_bottom)
}
}  

  

我第一时间想到了, 是UITableView没进行刷新布局, 我加上了setNeedsLayout 和 layoutIfNeeded 依旧不可, 我又想到, 是否我添加的header 和footer也需呢?

但是也是错误了, 后来我想了下, 修改了代码的顺序

override func viewDidLoad() {
super.viewDidLoad() self.tableView.dataSource = self
self.tableView.delegate = self self.view.addSubview(self.tableView)
self.tableView.mas_makeConstraints { (maker) in maker?.top.equalTo()(self.mas_topLayoutGuide)
maker?.left.right()?.equalTo()(self.view)
maker?.bottom.equalTo()(self.view.mas_bottom)
} //必要的代码, 刷新TableView
self.tableView.setNeedsLayout()
self.tableView.layoutIfNeeded() //1.创建header,footerView
let headView = SettingHeaderView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 120))
let footerView = SettingFooterView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 150)) //2.赋值给UITableView
self.tableView.tableHeaderView = headView
self.tableView.tableFooterView = footerView     //必要的代码, 刷新TableView
self.tableView.setNeedsLayout()
self.tableView.layoutIfNeeded()
}

  

  

UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常的更多相关文章

  1. 去掉UITableView HeaderView或FooterView随tableView 移动的黏性

    去掉UITableView HeaderView或FooterView随tableView 移动的黏性(sticky) 控制器中实现以下方法即可: - (void)scrollViewDidScrol ...

  2. UICollectionView添加 HeaderView FooterView

    UICollectionView显示HeaderView FooterView 不如UITableView那么容易,常用会有两种做法: 1.Xib或者Storyboard 在属性一栏中设置一下: 如图 ...

  3. 去掉UItableview headerview黏性(sticky)

    // 去掉UItableview headerview黏性(sticky) - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFlo ...

  4. 去掉UItableview headerview黏性

    //去掉UItableview headerview黏性 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView ...

  5. iOS设置tableViewCell之间的间距(去掉UItableview headerview黏性)

    经常在项目中遇到自定义cell的情况,而且要求cell之间有间距,但是系统没有提供改变cell间距的方法,怎么办? 方法1:自定义cell的时候加一个背景View,使其距离contentView的上下 ...

  6. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  7. 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!

    在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...

  8. VS2012外接程序VMDebugger未能加载或导致了异常

    转http://blog.csdn.net/maryhuan/article/details/42676915 故障现象:打开Visual Studio 2010后弹出错误框,外接程序VMDebugg ...

  9. Fragment已经被added了导致的异常。

    java.lang.IllegalStateException: Fragment already added:  ******Effect 出现的原因是commit方法提交是异步的,所以容易出现,判 ...

随机推荐

  1. 搭建Android开发环境 以及 ionic 编译安卓app步骤

    1. 下载安装JDK 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...

  2. 通过 loganalyzer 展示数据库中的系统日志

    目录 通过 loganalyzer 展示数据库中的日志 环境准备 准备服务器: 日志服务器: 数据库服务器: 测试日志服务器和数据库是否连接: websrv服务器端: 通过 loganalyzer 展 ...

  3. Hystrix集群及集群监控turbine

    Hystrix集群及监控turbine 前面Dashboard演示的仅仅是单机服务监控,实际项目基本都是集群,所以这里集群监控用的是turbine. turbine是基于Dashboard的. 先搞个 ...

  4. Pytorch 记录

    BCELoss BCEWithLogitsLoss 将sigmoid和BCELoss结合在一起,数据的稳定性更好. torch.nn.functional: binary_cross_entropy_ ...

  5. PCA主成分分析(最大投影方差)

    PCA简介: 从n维数据中提取最能代表这组数据的m个向量,也就是对数据进行降维(n->m),提取特征. 目标: 找到一个向量\(\mu\),使n个点在其上的投影的方差最大(投影后的数据越不集中, ...

  6. ionic项目打包+部署

    环境: 1.ionic 2.angular-cli  开发 1.CTRL C + CTRL V 2.图片路径的问题 使用‘assets/xxxxx.jpg’,而不使用‘../../assets/xxx ...

  7. How do I unmute my Lenovo laptop?

    If the FN key does have a green light just press and hold down the FN button on the bottom left of t ...

  8. OpenStack与ZStack深度对比:架构、部署、计算、运维监控等

    摘要 OpenStack从2010年开源至今,已经走过9个年头,其正在进入主流企业市场,但该项目依然面临较难部署和管理的老问题.有一点是毫无疑问的,那就是OpenStack保持着高速增长的态势,超过5 ...

  9. 编译原理之DFA最小化,语法分析初步

    1.将DFA最小化: 状态转换图: 识别语言:b*ac*(da)*bb* 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 (1)正规式: S -> 0(1S+ ...

  10. PHP计算二维数组指定元素的和

    array_sum(array_column($arr, 'num')); //计算二维数组指定元素的和 $arr = [ [ 'id'=>1, 'num'=>3, ], [ 'id'=& ...