关于iOS的autolayout中导航栏的疑问

在storyBoard中,如果使用editor>embed>navigation controller 就可以给一个Controller添加一个导航栏控制器

这时候拖一个view上去,给这个view添加约束的时候,就会有top layout guide这个选项,这样在横屏,竖屏情况下,view都会紧贴导航栏显示

但是在新创建一个file的时候,一起创建出来的xib却没有这种选项,要想让view紧贴导航栏显示,必须要将顶部约束成64,但是在横屏状态下就会在导航栏和view中间出现白条,因为横屏状态下状态栏会消失,导航栏会的hight会变小

我曾经尝试使用sizeClass来解决这个问题,在4,5,6 ,6P, 6s上没有问题,但是在6sP上,导航栏在横屏的时候hight没有变,瞬间想吐血

然后我想到了一个比较复杂的解决办法:

利用automaticallyAdjustsScrollViewInsets这个属性来自适应导航栏,具体做法是

先在xib上拖一个scrollView,然后将上下左右约束全都设置为0

然后再拖一个view到scrollView上,四个约束也全部是0,这时候会出现约束报红,先不管,继续对view添加约束

先添加一个水平约束

再添加一个height约束

这时候就发现约束报错消失,这样约束之后,scrollview的contentSize的宽就是屏幕的宽度,高是我们对view的height约束

当我们在viewWillAppear方法中添加self.automaticallyAdjustsScrollViewInsets = YES;

这样导航条的位置就会自动被空出来,我们的控件在view上进行约束就可以实现紧贴导航条的效果

最后的重点

虽然这个方法可以解决问题,但是很麻烦,添加的图层也很多,不知道有没有直接设置xib就可以解决的简单方法

哪位大神知道帮帮啊

在下愿意用一颗苹果来换!!!

时间: 2024-12-22 19:25:18

关于iOS的autolayout中导航栏的疑问的相关文章

xcode6中导航栏 控制view用程序编写

1.新建个视图控制器用来管理视图 2.新建个按钮 通过按钮把新的view压入栈中 爽歪歪是个按钮  一点击它  直接进入第二界面   在第二界面自动生成个返回按钮 xcode6中导航栏 控制view用程序编写,布布扣,bubuko.com

IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)

为尊重文章原作者,转载务必注明原文地址:http://www.cnblogs.com/wt616/p/3784717.html 先看效果图: 在自定义导航栏背景时,可能会遇到以下一些问题: 1.当设置导航栏背景后,状态栏的颜色也会跟着一起改变掉,这可能不是你说希望看到的 2.IOS7以上的版本和低版本显示出来的导航栏高度位置有差别,这个差别就是状态栏的高度20,为了兼容低版本,必须统一 解决思路: 1.不正常的是状态栏的背景也一起变了,而状态栏的文字是可以通过其他API去设置的:如 [[UIAp

iOS 更改状态栏、导航栏颜色的几种方法

ios上状态栏 就是指的最上面的20像素高的部分状态栏分前后两部分,要分清这两个概念,后面会用到: 前景部分:就是指的显示电池.时间等部分:背景部分:就是显示黑色或者图片的背景部分: (一)设置statusBar的[前景部分] 简单来说,就是设置显示电池电量.时间.网络部分标示的颜色, 这里只能设置两种颜色: 默认的黑色(UIStatusBarStyleDefault)白色(UIStatusBarStyleLightContent)可以设置的地方有两个:plist设置里面 和 程序代码里初始化设

[iOS类别的使用]---导航栏leftBarButtonItem图标修改

类别(Category) 修改特定的ViewController的导航栏Item图标 在项目中,遇到这样一个问题: 一个新增的VIewController1 想要push到原有的别的VIewController2中时 原有的VIewController2的导航栏左侧leftBarButtonItem图标,变成了系统自带的样式, 而且,由于项目混合使用了代码和StoryBoard开发,更增加了统一修改leftBarButtonItem的难度! 一般来说,我们会在 VIewController2 中

iOS 屏幕原点坐标 && 导航栏风格的自定义

其一 屏幕原点坐标 (x ,y) 受 self.navigationController. navigationBar 的 setTranslucent (BOOL) 属性控制 在 iOS7 以后  translucent  属性默认为 YES   该属性含义是 毛玻璃 半透明效果 YES  起始 坐标 为屏幕顶端 左上角 为 (0 , 0)  ,此时 UI展示的内容可透过 导航栏 NO   起始 坐标 为屏幕顶端 左上角 为 (0 , 20 + 44) 这个说明 起始坐标 在状态栏 和 导航栏

iOS菜鸟开发-2 导航栏主题

1.给每个子控制器添加导航栏 /** *  初始化一个子控制器 * *  @param child               需要初始化的子控制器 *  @param title               标题 *  @param imageName           未选中图标 *  @param selectedImageName   选中的图标 */ - (void)setupOneChildVC:(UIViewController *)child title:(NSString *

ios显示或隐藏导航栏的底线

根据产品需求要求把这个界面导航栏的底线去掉,下个控制器还需要有底线. 使用下面的代码实现 //在页面出现的时候就将黑线隐藏起来 -(void)viewWillAppear:(BOOL)animated { [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigation

iOS 笔记-自定义的导航栏按钮

暂时记录一个小知识点,因为赶着做项目,后续会慢慢补充 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"侧栏" style:UIBarButtonItemStylePlain target:self action:@selector(clickleftButton:)]; 如果我们使用这行代码来定义按钮,无论左边右边,图片还是文字,他都会把字体或图片颜色变成默认的蓝色,然而并不

iOS获取状态栏和导航栏尺寸(宽度和高度)

iPhone开发当中,有时需要获取状态栏和导航栏高度.宽度信息,方便布局其他控件.下面介绍一下如何获取这些信息: // 状态栏(statusbar) CGRect rectStatus = [[UIApplication sharedApplication] statusBarFrame]; NSLog(@"status width - %f", rectStatus.size.width); // 宽度 NSLog(@"status height - %f", r