在绑定更改时无法阻止UITableView移动

时间:2014-05-25 12:14:02

标签: ios objective-c uitableview frame bounds

我使用此方法创建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会因为(我认为)边界的变化而降低。但是,我尝试在故事板中关闭自动布局,转换autoresizesSubviewsself.view的{​​{1}}“BOOL”,甚至尝试更改self.tableView上的约束。每次加载视图时,内容都会移动。此外,我已将启动设置为tableView,但实际尺寸不会映射到屏幕。在viewDidLoad启动tableView后,如何强制viewDidLayoutSubviews保持不变?

1 个答案:

答案 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);
}