在旋转到横向时自动调整UINavigationBar的大小

Stu*_*rtM 5 uinavigationbar uinavigationcontroller uinavigationitem ios ios5

典型的NavController行为是在port/landscape中调整大小.从44px高度到32px我相信(从我的头顶).

我正在使用故事板并将导航栏包含在VC中,而不是控制器中.在纵向和横向之间旋转时,导航栏不会自动调整大小.

我已经看到了这个答案,但这没有帮助:在旋转时调整UINavigationBar的大小

导航栏是通过外观控制器,它在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];
Run Code Online (Sandbox Code Playgroud)

不幸的是,最后一部分没有区别,因为导航栏将包含在多个控制器中,我不想在上面的问题中重复相同的胶水代码,以回答所有我的VC在旋转时调整大小.

小智 5

如果您正在使用自动版式的UINavigationBarintrinsicContentSize更新正确的旋转,但它的高度NSContentSizeLayoutConstraint却没有.invalidateIntrinsicContentSize手动调用告诉autolayout更新导航栏的高度约束.

// View controller
public override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
  super.viewWillTransition(to: size, with: coordinator);

  self.navigationBar?.invalidateIntrinsicContentSize();
}
Run Code Online (Sandbox Code Playgroud)


mat*_*att 4

[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin];
Run Code Online (Sandbox Code Playgroud)

但你没有说灵活高度。然而,据我了解,高度正是您希望灵活的特征。