0

我有一个以编程方式创建的三行静态表格视图。我在 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 中不起作用?

4

2 回答 2

1

在你的viewDidLoad,你有多大view

您的代码中有幻数 - CGRectMake(10, 100, 280, 150);. 如果您希望表格视图从视图的左上角和右下角固定大小,请解决此问题,不要假设您已经知道视图的大小!

就像是 :

CGSize container = self.view.frame.size;
CGRect fr = CGRectMake(10, 100, container.width-60, container.height-100);

否则,您可能会将您的 tableview 放在视图之外,并且自动调整大小的掩码会被混淆!

于 2013-08-09T14:51:06.297 回答
1

一切都与时机有关。

  • viewWillAppear在视图层次结构布局完成后调用。这意味着自动调整大小引起的任何巫术都将被此处执行的布局相关操作覆盖。

  • viewDidLoad在视图完成布局之前调用 - 这意味着在执行代码后将viewDidLoad发生自动调整大小。

希望这可以澄清事情

于 2013-08-09T14:46:59.780 回答