Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 旋转到横向时自动调整UINavigationBar的大小_Ios_Ios5_Uinavigationcontroller_Uinavigationbar_Uinavigationitem - Fatal编程技术网

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

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

典型的NavController行为是在端口/横向中调整大小。从44px的高度到32px的高度(从头顶)

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

我已经看到了这个答案,但这无助于:

导航栏通过加载在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];
不幸的是,最后一部分没有什么区别,因为导航栏将包含在多个控制器中,我不想重复上面问题答案中的相同粘合代码,以便在旋转时调整所有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();
}