Iphone 使导航栏在xCode 5/iOS7中的状态栏后面伸展

Iphone 使导航栏在xCode 5/iOS7中的状态栏后面伸展,iphone,objective-c,xcode,uiviewcontroller,ios7,Iphone,Objective C,Xcode,Uiviewcontroller,Ios7,我按照以下教程向下移动导航栏,使其不被xcode 5/ios7中的状态栏覆盖: 但是现在在iOS7中,状态栏的顶部有一个空白,我希望导航栏也能填充这个区域 例如,Facebook/Twitter/Instagram iOS7应用程序的状态栏后面也有导航栏背景。我如何做到这一点 对不起,如果我不清楚,但真的很想得到这个排序 谢谢大家!

我按照以下教程向下移动导航栏,使其不被xcode 5/ios7中的状态栏覆盖:

但是现在在iOS7中,状态栏的顶部有一个空白,我希望导航栏也能填充这个区域

例如,Facebook/Twitter/Instagram iOS7应用程序的状态栏后面也有导航栏背景。我如何做到这一点

对不起,如果我不清楚,但真的很想得到这个排序


谢谢大家!
  • UIStatusBar是透明的
  • 将UINavigationBar的barPosition属性设置为UIBarPositionTopAttached
  • iOS 7中的UINavigationBar背景图像(如果UIBarPositionTopAttached)的尺寸与iOS 7之前的不同,您必须使用它们:现在的高度为64点
  • 在代码中(仅限iPhone):

    如果您只想更改为UINavigationBar的背景色,它将自动延伸到UIStatusBar的后面

    代码:

        [UINavigationBar appearance].barTintColor = [UIColor redColor];
    

    您确实想设置
    UINavigationBar
    barPosition

    您可以在代码中执行此操作:

    让您的ViewController符合协议
    UINavigationBarDelegate
    ,并实现位置栏:metod。(您真正需要的协议是
    UIBarPositioningDelegate
    ,但是
    UINavigationBarDelegate
    确实扩展了它。)

    @接口SampleViewController()
    @属性(弱、非原子)IBUINAVIGATIONBAR*导航条;
    @结束
    @实现SampleViewController
    -(无效)viewDidLoad{
    [超级视图下载];
    _navigationBar.delegate=self;
    }
    -(UIBAR位置)杆的位置:(id)杆{
    返回UIBarPositionTopAttached;
    }
    @结束
    
    或在故事板中:

    UINavigationBar
    的标识检查器中,添加一个用户定义的运行时属性,其中KeyPath=barPosition,Type=Number,Value=3:


    您使用的是自定义导航栏还是内置导航栏?您可能需要解释如何实际设置导航栏位置。非常感谢您教我“用户定义的运行时属性”菜单的功能。这对我来说是惊天动地的。我永远不会再将ui元素子类化以更改一个属性。这里有有趣的发现,但它对我不起作用。我总是会遇到以下错误:“***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因是:“无法在控制器管理的UINavigationBar上手动设置委托。”“如果我覆盖UINavigationViewController并将其添加到其中,则不会出现错误,但是它也不起作用…@哈哈,我只是希望你是在讽刺,哦。这根本不是你应该养成的习惯。这很快就会成为调试的噩梦。@TheCodingArt是的,我在读Uber工程师在Quora上的一些文章,他们说他们从Xcode中删除了所有图形用户界面设计工具——正是因为这个;而且,Xcode存储和解析文件的方式导致了版本控制的噩梦。这条评论肯定有4张赞成票,但我认为这些应该被恰当地视为“紧急情况”,例如单作者/模型/非生产应用程序!有趣的是,许多工程师讨厌情节串连板,并抱怨他们对测试和调试很糟糕。。。然后你打开他们的代码,他们有无数的胶水代码和样板,这是绝对不可解析的
        [UINavigationBar appearance].barTintColor = [UIColor redColor];
    
    @interface SampleViewController () <UINavigationBarDelegate>
    @property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar;
    @end
    
    @implementation SampleViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        _navigationBar.delegate = self;
    }
    
    - (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
        return UIBarPositionTopAttached;
    }
    @end