我使用此方法创建UITableView
(在UIViewController
内):
- (void) viewDidLayoutSubviews {
if (!self.tableView) {
self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 120, self.view.bounds.size.width, self.view.bounds.size.height-120) style:UITableViewStylePlain];
self.tableView.superview.autoresizingMask= NO;
// [self.tableView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleTopMargin];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.backgroundColor = [UIColor blueColor];
self.edgesForExtendedLayout = UIRectEdgeNone;
[self.tableView setShowsHorizontalScrollIndicator:NO];
[self.tableView setShowsVerticalScrollIndicator:NO];
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:self.tableView];
}
}
当应用程序进入后台并重新加载视图控制器时,tableView
会因为(我认为)边界的变化而降低。但是,我尝试在故事板中关闭自动布局,转换autoresizesSubviews
和self.view
的{{1}}“BOOL”,甚至尝试更改self.tableView
上的约束。每次加载视图时,内容都会移动。此外,我已将启动设置为tableView
,但实际尺寸不会映射到屏幕。在viewDidLoad
启动tableView
后,如何强制viewDidLayoutSubviews
保持不变?
答案 0 :(得分:2)
viewDidLoad
在视图控制器生命周期中只调用一次,并在视图具有它的边界属性集之前调用。这是初始化子视图的理想场所。
-(void)viewDidLoad
{
[super viewDidLoad];
self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 120, self.view.bounds.size.width, self.view.bounds.size.height-120) style:UITableViewStylePlain];
self.tableView.superview.autoresizingMask= NO;
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.backgroundColor = [UIColor blueColor];
self.edgesForExtendedLayout = UIRectEdgeNone;
[self.tableView setShowsHorizontalScrollIndicator:NO];
[self.tableView setShowsVerticalScrollIndicator:NO];
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:self.tableView];
}
每次边界更改时都会调用 viewDidLayoutSubviews
,因此在该方法中设置框架将确保始终根据当前边界调整tableView的大小:
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.tableView.frame = CGRectMake(0, 120, self.view.bounds.size.width, self.view.bounds.size.height-120);
}