看如下代码。运行后,bottomView的y坐标始终是0.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if( self.bottomView.isHidden) return 20;
return _datas.count;
}
- (UITableView *)tableView{
if( !_tableView ){
_tableView = [[UITableView alloc] init];
_tableView.dataSource = self;
[self.view addSubview:_tableView];
CGFloat ix = 0,iy = 50;
CGFloat ih = 160;
_tableView.frame = CGRectMake(ix, iy, SCREEN_WIDTH-2*ix, ih);
}
return _tableView;
}
- (UIView *)bottomView{
if( !_ bottomView ){
_ bottomView = [[UIView alloc] init];
[self.view addSubview: _bottomView];
CGFloat iy = self.tableView.bottom;
CGFloat ih = 100;
_bottomView.frame = CGRectMake(0, iy, 180, ih);
}
return _bottomView;
}
原因是,设置bottomview的frame时,取到的tableview的bottom是0.
按常理来说,即无论我先调用bottomview还是tableview,最后bottom的y都不应该是0.
最后打断点发现:
当执行 [self.view addSubview:_tableView];这行代码时,会调用tableview的数据源代理方法,此时tableview还没有设置frame,而在tableview的数据源方法中,调用了bottomview,所以此时会设置其frame,但此时因tableview还么有设置frame, 所以取不到 tableview的bottom的值。
网友评论