- 使用Xib设置tableHeaderView 或 tableFo
- swift中xib的tableHeaderView高度设置问题
- xib创建tableHeaderView和tableFooter
- 使用tableView的tableHeaderView注意点
- iOS tableView设置tableHeaderView使用
- tableView增加headHeight或者footHeigh
- 使用Masonry布局时,tableHeaderView的设置
- xib自定义UIView作为UITableView的tableH
- 使用xib创建tableview的tableHeaderView
- [viewA addSubview:vc.view] 遇到的问题
如果你经常使用IB布局,在XIB
里使用tableView
的时候,一定遇到过一个问题,怎么直接通过XIB
来设置tableView
的tableHeaderView
。今天,就来说下这个问题。
在介绍方法之前,需要讲解下一个属性。
autoResizingMask
官方定义
An integer bit mask that determines how the receiver resizes itself when its superview’s bounds change.
解释
枚举类型,当父视图bounds改变时,自动调节子控件在父视图中的位置与宽高
枚举类型
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0, //不自动调整。
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,//自动调整view与父视图左边距,以保证右边距不变
UIViewAutoresizingFlexibleWidth = 1 << 1,//自动调整view的宽度,保证左边距和右边距不变
UIViewAutoresizingFlexibleRightMargin = 1 << 2,//自动调整view与父视图右边距,以保证左边距不变
UIViewAutoresizingFlexibleTopMargin = 1 << 3,//自动调整view与父视图上边距,以保证下边距不变
UIViewAutoresizingFlexibleHeight = 1 << 4,//自动调整view的高度,以保证上边距和下边距不变
UIViewAutoresizingFlexibleBottomMargin = 1 << 5 //自动调整view与父视图下边距,以保证上边距不变
};
看了上面的介绍,对于AutoResizingMask
的功能应该有一个大致的了解了。下面再回到tableHeaderView
上面来。我们来了解下为什么使用XIB
设置tableHeaderView
不生效呢?
TableHeaderView
-
新建工程,在
ViewController
中添加一个TableView
。 -
新建个类
FDTableHeaderView
,设置背景色为浅灰色。并添加一个Label
控件作为我们改变之后动态改变TableHeaderView
的工具。
- 在
Controller
中通过XIB
声明一个FDTableHeaderView
对象,设置为tableView
的tableHeaderView
。
UINib *nib = [UINib nibWithNibName:@"FDTableHeaderView" bundle:nil];
FDTableHeaderView *header = [nib instantiateWithOwner:nil options:nil][0];
self.tableView.tableHeaderView = header;
运行看结果:
002
从上图可以看到,Header
并没有生效,这是为什么呢?我们设置个断点来看下。
上面这张图是设置断点后的图片,并打印了header
的一些信息。仔细观察,可以发现一个autoresize
属性为(W+H),结合上面我们介绍的AutoResizngMask
可以分析出来,header
的AutoResizingMask
应该是被默认设置成了根据父视图的大小改变自身的宽高,可能是这个造成header
的frame
被改变了。
在这里我们可以简单假设下,如果把header
的AutoResizingMask
设置为None
,不让header
随着父视图的改变而改变,会有什么效果?
header.autoresizingMask = UIViewAutoresizingNone;
004
从上图可以看到,设置header
的AutoResizingMask
为UIViewAutoresizingNone
后,header就不会跟随父视图变化了。
这样,我们通过XIB
来设置tableHeaderView
的目的就达到了,只需要添加一行代码而已。
总结
通过上面的一个简单尝试,我们达到了直接使用XIB
来设置tableHeaderView
或者tableFooterView
的功能,这样在实际开发中就可以更快速的设置了。然而这里,仍然有一个疑惑,从结果分析来看,header
无法生效的原因可能是父视图frame
为0造成的,然后通过控制台打印可以看到header
的父视图是tableView
,并且frame
不为0,那导致header
的frame
被改变的根本原因出在哪里呢?tableView
在底层又到底是怎么添加header
的呢?有知道的可以帮忙科普下,谢谢~
感谢
文章作为学习阶段的总结,会存在许多不足之处,如有讲解错误之处,希望可以及时指出,及时更正。如果这篇文章给予你了一点帮助,那就顺手在简书点个关注,在GitHub上点个Star,谢谢~
共勉。
autoresizingMask - UIView | Apple Developer Documentation
IOS自动布局之Autoresizing
网友评论