典型的NavController行为是在port / landscape中调整大小。从44px高度到32px我相信(从我的头顶)。
我正在使用故事板并将导航栏包含在VC中,而不是控制器中。在纵向和横向之间旋转时,导航栏不会自动调整大小。
我已经看到了这个答案,但这没有帮助:Resizing UINavigationBar on rotation
导航栏是通过外观控制器,加载在App Delegate:
中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];
不幸的是,最后一部分没有区别,因为导航栏将包含在多个控制器中,我不想在上面的问题中重复相同的胶水代码,以回答所有我的VC在旋转时调整大小。
答案 0 :(得分:5)
如果您使用的是自动布局,UINavigationBar
的{{1}}会在轮换时正确更新,但其高度intrinsicContentSize
则不会。手动调用NSContentSizeLayoutConstraint
会告诉autolayout更新导航栏的高度约束。
invalidateIntrinsicContentSize
答案 1 :(得分:4)
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin];
但你没有说灵活的身高。然而,正如我所理解的那样,高度是您希望变得灵活的特征。
答案 2 :(得分:0)
接受的答案对我有用,但我想转向完全基于约束的布局。
根据需要在UIBarPosition
委托上设置UINavBar
。记得在IB中附上代表(当然)。
// In my view controller
#pragma mark - UIBarPositioningDelegate
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
return UIBarPositionTopAttached;
}
对于IB中UINavBar
的约束:
高度将由运行时的内容大小决定。最初我无法正常工作,因为我的垂直内容拥抱优先级为750,但那是错误的。当我将其更改回默认值(250)时,它工作正常。