-
Notifications
You must be signed in to change notification settings - Fork 257
在一个页面中混合使用传统frame布局和flex布局
zhenglibao edited this page Jan 6, 2018
·
2 revisions
示例代码如下:
CGRect rcFrame = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 0);
FlexFrameView* header = [[FlexFrameView alloc]initWithFlex:@"TableHeader" Frame:rcFrame Owner:self];
header.flexibleHeight = YES;
header.onFrameChange = ^(CGRect rc){
[weakSelf tableHeaderFrameChange];
};
[header layoutIfNeeded];
_table.tableHeaderView = header;
FlexFrameView本身使用传统frame方式,在其内部维护一个使用flexbox方式布局的view,如果修改了xml中view的属性导致其大小发生变化,则需要通过onFrameChange来监听。
flexibleWidth和flexibleHeight如果为YES,则表示其高度和宽度均由空间自身决定,也就是无需设置其宽度和高度 如果两者为NO,则表示使用固定大小,这种情况下需要指定对应的宽度和高度
这种情况无需特殊处理,直接在xml中像使用其他view一样使用即可。
需要注意的是,如果该view使用了特殊的初始化函数(不是init方式初始化),比如创建一个UITableView,需要调用其initWithFrame:style:方法,则需要在owner中(一般是ViewController)重载createView:Name:方法来创建该view。
Flexbox Introduction & performance (in Chinese)
Tutorial 1: Create View Controller with xml layout
Tutorial 2: Create Table Cell with xml layout
Tutorial 3: Embed xml layout into traditional view hierarchy
Tutorial 4: Use custom view in xml layout
Tutorial 5: Create reusable view using xml layout file