更改 UINavigationController 中的视图高度
Posted
技术标签:
【中文标题】更改 UINavigationController 中的视图高度【英文标题】:Changing height of view inside UINavigationController 【发布时间】:2012-11-05 12:33:04 【问题描述】:我想更改 UINavigationController
内的 UIViewController's
视图的高度,以在底部显示横幅,以免遮挡任何内容。
我认为只需更改 viewDidLoad
中的视图框架就可以很容易地做到这一点,但这没有用:
CGRect frame = self.view.frame;
self.view.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height - 49.0f);
我也试过添加
[navigationController.view setAutoresizesSubviews:NO];
在启动UINavigationController
之后,它看起来还是一样。
我现在能想到的唯一选择是在一个虚拟的UITabBarController
中使用UINavigationController
,它会被横幅遮住,但对我来说这似乎不必要地复杂。
有什么方法可以改变 UINavigationController
内的视图控制器视图的高度吗?
【问题讨论】:
您是否将 UIViewController 添加到 UINavigationController? 我想从这个链接中得到一些想法。developer.apple.com/library/ios/#documentation/userexperience/… 查看视图的布局约束。默认情况下,它们将填充导航控制器空间。无论导航控制器上的 autoresizesubviews 是什么 【参考方案1】:无法从视图控制器中更改视图控制器的视图,但您可以使用自定义容器视图控制器:
// Create container
UIViewController* container = [[UIViewController alloc] init];
// Create your view controller
UIViewController* myVc = [[MyViewController alloc] init];
// Add it as a child view controller
[container addChildViewController:myVc];
[container.view addSubview:myVc.view];
myVc.view.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight;
myVc.view.frame = CGRectMake(0, 0, container.view.bounds.size.width, container.view.bounds.size.height-200);
// Add your banner
UIImageView* imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"banner"]];
imgView.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth| UIViewAutoresizingMaskFlexibleTopMargin;
imgView.frame = CGRectMake(0, container.view.bounds.size.height-200, container.view.bounds.size.width, 200);
[myVc.view addSubview:imgView];
现在您可以将 container
视图控制器添加到您的导航控制器而不是您的控制器。
【讨论】:
它更具可定制性(您可以将自己的视图作为横幅),如果您无法访问视图控制器(例如使用表格视图)也很好......【参考方案2】:Swift 5 版本的@jjv360 答案:
override func viewDidLoad()
super.viewDidLoad()
let myVc = UIViewController()
self.addChild(myVc)
self.view.addSubview(myVc.view)
myVc.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
myVc.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height-200)
let imgView = UIImageView(image: UIImage(named: "banner"))
imgView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
imgView.frame = CGRect(x: 0, y: self.view.bounds.size.height-200, width:
self.view.bounds.size.width, height: 200)
myVc.view.addSubview(imgView)
【讨论】:
以上是关于更改 UINavigationController 中的视图高度的主要内容,如果未能解决你的问题,请参考以下文章
更改 UINavigationController 中的视图高度
Swift:更改 UINavigationController 视图的高度
快速更改UITabBar中“更多” UINavigationController的背景颜色
更改 UINavigationController 颜色和字体