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];
一些可能对发现问题有用的信息:
- 我有两个视图 tables,DoubleTable 和 SingleTable。
- SingleTable,惊喜惊喜,只有一个table,而DoubleTable有两个
- SingleTable没有我上面描述的问题。
- DoubleTable 中的 tables 在 viewDidAppear 中以编程方式调整大小。 SingleTable 中的 table 未以编程方式调整大小。
- 在 DoubleTable 中更改情节提要似乎不会影响 table 在我滑出菜单时调整大小的方式。
- 相反,当我打开幻灯片菜单时,程序调整大小似乎正在撤消,就好像它从未发生过一样。
这是我在 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 中?如果您在情节提要中启用了自动布局,那么它将为您添加约束,这会导致它在布局发生时快速返回。您也可以尝试将其关闭,但您必须确保没有任何限制,否则它会重新打开。
我正在与 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];
一些可能对发现问题有用的信息:
- 我有两个视图 tables,DoubleTable 和 SingleTable。
- SingleTable,惊喜惊喜,只有一个table,而DoubleTable有两个
- SingleTable没有我上面描述的问题。
- DoubleTable 中的 tables 在 viewDidAppear 中以编程方式调整大小。 SingleTable 中的 table 未以编程方式调整大小。
- 在 DoubleTable 中更改情节提要似乎不会影响 table 在我滑出菜单时调整大小的方式。
- 相反,当我打开幻灯片菜单时,程序调整大小似乎正在撤消,就好像它从未发生过一样。
这是我在 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 中?如果您在情节提要中启用了自动布局,那么它将为您添加约束,这会导致它在布局发生时快速返回。您也可以尝试将其关闭,但您必须确保没有任何限制,否则它会重新打开。