Ios 旋转到横向时自动调整UINavigationBar的大小
典型的NavController行为是在端口/横向中调整大小。从44px的高度到32px的高度(从头顶) 我使用的是一个故事板,在VC中包含了一个导航栏,而不是控制器。在纵向和横向之间旋转时,导航栏不会自动调整大小 我已经看到了这个答案,但这无助于: 导航栏通过加载在App Delegate中的外观显示在控制器上:Ios 旋转到横向时自动调整UINavigationBar的大小,ios,ios5,uinavigationcontroller,uinavigationbar,uinavigationitem,Ios,Ios5,Uinavigationcontroller,Uinavigationbar,Uinavigationitem,典型的NavController行为是在端口/横向中调整大小。从44px的高度到32px的高度(从头顶) 我使用的是一个故事板,在VC中包含了一个导航栏,而不是控制器。在纵向和横向之间旋转时,导航栏不会自动调整大小 我已经看到了这个答案,但这无助于: 导航栏通过加载在App Delegate中的外观显示在控制器上: UIImage *portraitImage = [UIImage imageNamed:@"mainNavBar"]; UIImage *landscapeImage = [UII
UIImage *portraitImage = [UIImage imageNamed:@"mainNavBar"];
UIImage *landscapeImage = [UIImage imageNamed:@"mainNavBarLandscape"];
[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone];
[[UINavigationBar appearance] setBackgroundColor:[UIColor blackColor]];
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,nil]];
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin];
不幸的是,最后一部分没有什么区别,因为导航栏将包含在多个控制器中,我不想重复上面问题答案中的相同粘合代码,以便在旋转时调整所有VCs的大小
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin];
但你没有说灵活的高度。然而,据我所知,高度正是您希望灵活的特性。这个公认的答案对我来说很有效,但我想转向完全基于约束的布局 在
UINavBar
上设置UIBarPosition
,代表根据需要定位对象。记住在IB中附加代理(当然)
//在我的视图控制器中
#pragma标记-UIBarPositioningDelegate
-(UIBAR位置)杆的位置:(id)杆{
返回UIBarPositionTopAttached;
}
对于IB中的UINavBar
约束:
- 顶部空间到:顶部布局指南(0)
- 指向的前导空间:Superview(0)
- 培训空间到:Superview(0)
- 最重要的是。。。。没有任何类型的高度限制!-李>
高度将由运行时的内容大小决定。最初我无法正常工作,因为我的垂直内容优先权为750,但这是错误的。当我将其更改回默认值(250)时,它工作正常。如果使用自动布局,则
UINavigationBar的intrinsicContentSize
在旋转时会正确更新,但其高度NSContentSizeLayoutConstraint
不会。手动调用invalidateIntrinsicContentSize
会告诉autolayout更新导航栏的高度约束
// View controller
public override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
super.viewWillTransition(to: size, with: coordinator);
self.navigationBar?.invalidateIntrinsicContentSize();
}
没错,我也注意到在发布后不久。感谢以上内容似乎从未调整过工具栏的大小。我相信它应该是32磅高的景观≤4英寸设备。这项技术似乎只考虑调整工具栏位置以确定是否存在状态栏。
// View controller
public override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
super.viewWillTransition(to: size, with: coordinator);
self.navigationBar?.invalidateIntrinsicContentSize();
}