1.10-屏幕适配
@masonry使用
注意点
1masonry布局自定义控件的子控件,外面使用这个自定义控件,若用frame固定布局,有时是无效的,必须用仍然用
masony
2若tableView用masonry布局时,如果再设置表头控件,会布局失败表(可能masonry无法适配复杂的表头)
若想成功设置表头,应该用frame布局tableView,initWithFramexxxx,但是自定义表头控件如果很复杂就不适合
用frame
解决方案:1tableView用frame布局
2要做表头的自定义视图,还是用方便的masonry布局
3tableView用一个空View做表头,设置好frame后,添加自定义视图为子控件
就是让自定义视图以空View为父控件。
示例代码:
//1设置表头 //1.1空视图 UIView *container = [UIView new]; container.frame = CGRectMake(0, 0, self.view.myWidth, 200); self.tableView.tableHeaderView = container; //1.2添加自定义视图 DJTimeView *timeView = [DJTimeView new]; [container addSubview:timeView]; [timeView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(0); }];
@注意点
1用masonry,对继承控件,进行重新约束?
<1用remake方法经常无效,用update更好些
<2不知为何,无法根据兄弟控件进行约束,只能根据父控件进行约束,所以只能这样写很多数字值了
[self.iconBtn mas_updateConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(10); make.top.mas_equalTo(15); make.width.mas_equalTo(44); make.height.mas_equalTo(44); }];
@经验楼
1自定义控件时,如果子控件有内容,可使用自适应方法,能节省很多约束代码,不过有时无法做精准控制
eg: [self.btn2 sizeToFit];
2如果自定义控件外部用的是frame固定布局,里面却用masonry布局,有时会导致布局失败
也就是苹果有时罩不住masonry砖头
3布局里可以直接用self,不需要weakSelf,因为里面做了一些处理。
@错误楼
1用masonry约束,没有宽高? width 的width写成with,导致宽度总是remake失败