调整视图大小以考虑工具栏
Posted
技术标签:
【中文标题】调整视图大小以考虑工具栏【英文标题】:Resize view to account for toolbar 【发布时间】:2016-11-21 09:32:07 【问题描述】:如果我创建一个基本的 ViewController 并向视图添加一个不透明的 UIToolbar,如下所示:
UIViewController* viewController = [[UIViewController alloc] init];
[viewController.view setBackgroundColor:[UIColor blueColor]]; // To make it easy to see
self.window.rootViewController = viewController;
UIToolbar* toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, viewController.view.frame.size.height - 49, viewController.view.frame.size.width, 49)]; // At bottom. Height of 49
[toolbar setBarStyle:UIBarStyleBlack]; // Opaque and easy to see
[self.window.rootViewController.view addSubview:toolbar]; // Add toolbar to view controller
视图层次结构如下所示:
如何让视图控制器调整其主要区域(蓝色部分)的大小,使其不会延伸到 UIToolbar 后面?
【问题讨论】:
保持 viewController.view 不变,不设置颜色,为蓝色部分添加另一个 UIView 这是否与将另一个 ViewController 中的视图添加为子视图相同? @ABeard 没找到你 如果我有第二个视图控制器,名为secondVC
,这就是您的建议吗? [viewController.view addSubview:secondVC.view];
在这种情况下你可以使用容器,看看***.com/questions/16884879/…
【参考方案1】:
尝试添加这行代码
viewController.edgesForExtendedLayout = UIRectEdgeNone;
这将使视图控制器的边缘不会向任何方向延伸。
或者,如果您想扩展顶部、左侧和右侧,而不是底部,您可以添加它。
viewController.edgesForExtendedLayout = UIRectEdgeTop, UIRectEdgeLeft, UIRectEdgeRight;
【讨论】:
这些都没有任何效果。【参考方案2】:这样试试
UIViewController* viewController = [[UIViewController alloc] init];
[viewController.view setBackgroundColor:[UIColor blueColor]]; // To make it easy to see
self.window.rootViewController = viewController;
UIToolbar* toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, viewController.view.frame.size.height - 49, viewController.view.frame.size.width, 49)]; // At bottom. Height of 49
[toolbar setBarStyle:UIBarStyleBlack]; // Opaque and easy to see
SecondViewController* secondChildVC = [self.storyboard instantiateViewControllerWithIdentifier:@"someId"];
[secondChildVC.view setBackgroundColor:[UIColor redColor]];
[viewController addChildViewController:secondChildVC];
[secondChildVC didMoveToParentViewController:viewController];
secondChildVC.view.frame = CGRectMake(0,0,viewController.view.frame.size.width,viewController.view.frame.size.height - 49);
[viewController.view addSubview:secondChildVC.view];
[self.window.rootViewController.view addSubview:toolbar];
【讨论】:
是否需要计算第二个VC的帧数?secondChildVC.view.frame = CGRectMake(0,0,viewController.view.frame.size.width,viewController.view.frame.size.height - 49);
这种计算正是我不想做的。
我希望主 VC 自动计算第二个 VC 的正确大小。有没有办法做到这一点?
换句话说,我需要主 VC 像 UITabBarController 或 UINavigationController 一样工作。这两个都会自动调整内容区域的大小,而无需自己计算。
如果不想计算frame,那么可以使用NSLayoutConstraints
我自己也开始这么想了。我正在尝试在此处遵循本指南:***.com/questions/31651022/…以上是关于调整视图大小以考虑工具栏的主要内容,如果未能解决你的问题,请参考以下文章
使用 UINavigationController setToolbarHidden:animated 时如何调整视图大小: