我有一个静态的tableview,其中有三行我以编程方式创建。我在ViewDidAppear中创建它(错误地)
CGRect fr = CGRectMake(10, 100, 280, 150);
SetUpTableView = [[UITableView alloc] initWithFrame:fr style:UITableViewStylePlain];
SetUpTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
SetUpTableView.delegate = self;
SetUpTableView.dataSource = self;
[self.view addSubview:SetUpTableView];
它工作正常。
我意识到它位于错误的位置,所以我把它移到了viewDidLoad
表格不会出现。
我注释掉了自动调整大小
CGRect fr = CGRectMake(10, 100, 280, 150);
SetUpTableView = [[UITableView alloc] initWithFrame:fr style:UITableViewStylePlain];
// SetUpTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
SetUpTableView.delegate = self;
SetUpTableView.dataSource = self;
[self.view addSubview:SetUpTableView];
现在它在viewDidLoad中工作正常。
我知道我在错误的位置并且这是一个不需要自动调整的静态表但是为什么它在viewDidAppear中工作但在viewDidLoad中不起作用?
答案 0 :(得分:1)
这完全取决于计时。
在视图层次结构布局完成后调用
- 在视图完成布局之前调用
viewWillAppear
。这意味着无论什么伏都教,自动调整大小都会被这里执行的布局相关操作覆盖。
viewDidLoad
- 这意味着在执行viewDidLoad
中的代码后将自动调整大小。< / p>
希望这能澄清事情
答案 1 :(得分:1)
在viewDidLoad
中,view
有多大?
你的代码中有魔术数字 - CGRectMake(10, 100, 280, 150);
。如果您希望tableview从视图的左上角和右下角开始是一个固定大小,那么请不要假设您已知道视图的大小!
类似的东西:
CGSize container = self.view.frame.size;
CGRect fr = CGRectMake(10, 100, container.width-60, container.height-100);
否则,您可能会将您的tableview放在视图之外,并且自动调整掩码只会混淆!