iOS - UITableViews 在不应该调整大小的时候被调整了

iOS - UITableViews are being resized when they shouldn't be

我正在与 ECSlidingViewController 合作。当我加载我的视图时,一切都完美显示。当我在加载视图后第一次滑出菜单时,我视图中的两个 table 改变了它们的高度。由于某种原因,顶部 table 多了一个(空白)行,底部 table 变小了。

据我所知,当我滑出菜单时,加载主视图的 MenuViewController.m 或 DoubleTable.m 中的代码都没有运行。

我要么需要防止这种调整发生,要么我需要能够在不需要的调整生效后更正它。

这是我在 viewDidLoad 下附加菜单的代码:

self.view.layer.shadowOpacity = 0.75f;
self.view.layer.shadowRadius = 10.0f;
self.view.layer.shadowColor = [UIColor blackColor].CGColor;


if(![self.slidingViewController.underLeftViewController isKindOfClass:[MenuViewController class]]) {
    self.slidingViewController.underLeftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];
}


[self.view addGestureRecognizer:self.slidingViewController.panGesture];

一些可能对发现问题有用的信息:

  1. 我有两个视图 tables,DoubleTable 和 SingleTable。
  2. SingleTable,惊喜惊喜,只有一个table,而DoubleTable有两个
  3. SingleTable没有我上面描述的问题。
  4. DoubleTable 中的 tables 在 vi​​ewDidAppear 中以编程方式调整大小。 SingleTable 中的 table 未以编程方式调整大小。
  5. 在 DoubleTable 中更改情节提要似乎不会影响 table 在我滑出菜单时调整大小的方式。
  6. 相反,当我打开幻灯片菜单时,程序调整大小似乎正在撤消,就好像它从未发生过一样。

这是我在 DoubleTable.m 中调整 tables 大小的方法:

-(void)viewDidAppear:(BOOL)animated{
    CGRect frame = table1.frame;
    CGRect Rect= [[UIScreen mainScreen] bounds];

    frame.size.height = table1.contentSize.height;
    table1.frame = frame;
    int table2Height = Rect.size.height - 150 - table1.frame.size.height;
    table2.frame = CGRectMake(table2.frame.origin.x, table1.frame.origin.y + 30 + table1.frame.size.height, table2.frame.size.width, table2Height);
}

如果有人认为我应该 post 还有更多代码,请随时询问。

您可能不仅需要在 viewDidAppear 中进行布局。也许在 layoutSubviews 中?如果您在情节提要中启用了自动布局,那么它将为您添加约束,这会导致它在布局发生时快速返回。您也可以尝试将其关闭,但您必须确保没有任何限制,否则它会重新打开。