iOS中导航栏与UITableView布局冲突问题
2016-05-20 本文已影响1214人
艳晓
情况描述:
我们需要实现下图效果
页面一.png分析过程
1、此页面还有其他几个页面都非常相似,考虑到这种情况,想到两种解决方法:
(1)使用UITextField等View控件解决
(2)使用UITableView,再自定义cell解决(UIViewController具有导航栏,需要在导航栏下添加一个tableView)
本文是使用第二种方法发生的Bug解决方案
self.automaticallyAdjustsScrollViewInsets = NO;解决navigation的一个自适应scrollView产生的一个高度问题
图层.png首先,要知道的是UITableView继承于UIScrollView
详情请查看以下链接
http://www.tuicool.com/articles/ymi22e
http://www.th7.cn/Program/IOS/201409/274079.shtml
代码一:UITableViewStylePlain下
#define SWIDTH [UIScreen mainScreen].bounds.size.width
@interface loginViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, strong) UITableView * tableView;
@end
- (void)viewDidLoad {
[super viewDidLoad];
如果没有这句代码会发生下图情况:cell与TableView具有高度差
self.automaticallyAdjustsScrollViewInsets = NO;
[self createTableView];
}
#pragma mark------自定义方法
- (void)createTableView{
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,64, SWIDTH, 200) style:UITableViewStylePlain];
self.tableView.backgroundColor = [UIColor purpleColor];
self.tableView.rowHeight = 50;
self.tableView.scrollEnabled = NO;
[self.view addSubview:self.tableView];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CELL"];
}
#pragma mark------ UITableViewDataSource,UITableViewDelegate方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 4;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"];
cell.textLabel.text = @"你好";
cell.backgroundColor = [UIColor yellowColor];
return cell;
}
代码二:UITableViewStylePlain下
#define SWIDTH [UIScreen mainScreen].bounds.size.width
@interface loginViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, strong) UITableView * tableView;
@end
- (void)viewDidLoad {
[super viewDidLoad];
如果没有这句代码会发生下图情况:cell与TableView具有高度差
self.automaticallyAdjustsScrollViewInsets = NO;
Group下BUG解决后.png
[self createTableView];
}
#pragma mark------自定义方法
- (void)createTableView{
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,64, SWIDTH, 200) style:UITableViewStylePlain];
self.tableView.backgroundColor = [UIColor purpleColor];
self.tableView.rowHeight = 50;
self.tableView.scrollEnabled = NO;
[self.view addSubview:self.tableView];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CELL"];
}
#pragma mark------ UITableViewDataSource,UITableViewDelegate方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"];
cell.textLabel.text = @"你好";
cell.backgroundColor = [UIColor yellowColor];
return cell;
}
/*
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SWIDTH, 10)];
v.backgroundColor = [UIColor redColor];
return v;
}
*/
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 10;
}
Group下注意事项:
1、分区头和分区尾的高度设置不能为0,如果设为0,是没有效果的。但是我们可以设置成一个很小的数值。
2、分区头尾的设置有属性和方法两种设置方式,如果使用方法设置viewForHeaderInSection:和heightForHeaderInSection:这两个方法中的高度要保持一致。