关于TableView和CollectionView 使用Mas

2017-03-04  本文已影响0人  AnnieAri

在使用masory对以上两个控件进行布局的时候有可能会报以下警告:

Paste_Image.png

一般如果是在cell里面的布局只要设置正确,是不会有警告的,这个警告原因是因为使用了这种方式创建tableView

UITableView *taskListTableView = [[UITableView alloc] initWithFrame:(CGRectZero) style:(UITableViewStyleGrouped)];  //宽设置为了0
 [self.view addSubview:taskListTableView];

//然后直接设置了tableViewHeader
   //头部视图
    CGFloat height = [ARMyTaskHeaderView getMaxY];  //这句用于计算  因为里面width已经给定 所以这句里面并没有报警告
    ARMyTaskHeaderView *headerView = [[ARMyTaskHeaderView alloc] initWithFrame:(CGRectMake(0, 0, ScreenWidth, height))];//关键在于这一句  
  ///在给tableView的header赋值时,创建的view x,y,width 全都无效  只有height是有效的   
  //所以这时候 headerView的width其实是0  ;
    self.headerView = headerView;   
    taskListTableView.tableHeaderView = headerView;
 //布局
    [taskListTableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.offset(0);
    }];

所以有了关键的一句:

   "<NSLayoutConstraint:0x600000482620 ARMyTaskHeaderView:0x7fe8e2622c80.width == 0>"

虽然最终没有影响 但是报警告还是很烦的 所以有header的时候创建tableView还是给1个宽吧;

然后说一下collectionView的 flowLayout的事,
如果使用masory 给collectionView设布局图省事 给frame赋值zero

UICollectionView * colletionView= [[UICollectionView alloc] initWithFrame:(CGRectZero) collectionViewLayout:layout];

你将会在控制台看见 大概就是collectionView的size 比 itemSize还要小的那个警告 ,具体不贴代码了

可以在一下代理重新设置layout

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    CGFloat width = (ScreenWidth - 4 * margin) / 3;
    CGFloat height = width *Ari_CellRatio;
    return CGSizeMake(width, height);
}
上一篇下一篇

猜你喜欢

热点阅读