UINavigationBar 元素太靠近 UIStatusBar [重复]

Posted

技术标签:

【中文标题】UINavigationBar 元素太靠近 UIStatusBar [重复]【英文标题】:UINavigationBar elements too close to UIStatusBar [duplicate] 【发布时间】:2013-12-24 03:27:13 【问题描述】:

我有一个应用程序,其中 UINavigationBar 不适应 ios7 定位,我不知道如何让它正确定位。

我没有使用自动布局,但附上了我遇到的问题的屏幕截图:

【问题讨论】:

见:developer.apple.com/library/ios/qa/qa1797/_index.html 【参考方案1】:

在你的视图控制器中实现 positionForBar: 方法

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar 
    return UIBarPositionTopAttached;

将自己设置为工具栏代表,也许你必须将你的工具栏向下移动 20 pt。

【讨论】:

第二部分怎么做?将自己设置为工具栏代表,也许您必须将工具栏向下移动 20 pt。感谢您的帮助【参考方案2】:

iOS7上的新东西使用全屏布局,如果你想把你的导航栏放在最上面你需要这样实现UIBarPositioningDelegate

-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar

    if ([bar isKindOfClass:[UINavigationBar class]]) 
        return UIBarPositionTopAttached;
    
    return UIBarPositionAny;

不要忘记将导航栏的委托分配给实现此方法的类,即

//self should be the controller that implements the above method.
myNavigationBarReference.delegate = self; 

附: UINavigationBarDelegateUIToolBarDelegate继承UIBarPositioningDelegate

【讨论】:

我将该代码添加到 .m 文件中。那是对的吗?还是应该将其添加到应用程序委托中?我不确定如何将导航栏的委托分配给实现此方法的类。这是我开发的首批应用程序之一,如果它是基本的东西,我深表歉意。感谢您的帮助 您需要对 NavigationBar 的引用,因此为了分配委托,请执行以下操作:`myNavigationBarReference.delegate = self',我已经编辑了答案,希望对您有所帮助。 所以我的代码现在看起来像这样。 -(UIBarPosition)positionForBar:(id&lt;UIBarPositioning&gt;)bar if ([bar isKindOfClass:[UINavigationBar class]]) return UIBarPositionTopAttached; return UIBarPositionAny; navbar.delegate=self; 但是,它仍然没有正确定位 天啊!请把 navbar.delegate=self;在 viewDidLoad 方法上。【参考方案3】:

尝试在 viewDidLoad: 方法中添加如下代码

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])

    self.edgesForExtendedLayout = UIRectEdgeNone;

愿它解决您的问题。编码愉快!

【讨论】:

【参考方案4】:

您可以在需要的地方以编程方式逐步采用自动布局。你是否在视图中添加了一个导航栏而不是使用导航控制器?如果是这样,您可以添加几行来解决您的问题。

id topGuide = self.topLayoutGuide;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings (topGuide, yourNavigationBar);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[topGuide]-0-[yourNavigationBar]"
                                                               options:0
                                                               metrics:nil
                                                                 views:viewsDictionary];
[self.view addConstraints:constraints];

如果不是这样,请告诉我你的实现。

【讨论】:

以上是关于UINavigationBar 元素太靠近 UIStatusBar [重复]的主要内容,如果未能解决你的问题,请参考以下文章

防止自定义 UINavigationBar 元素在视图之间更改

自定义 UIToolbar 太靠近 iPhone X 上的主页指示器

UIPageViewController 页面控件太靠近 iPhone X iOS 11 上的主页栏

UIBarButton 未在 UINavigationBar 中显示

ps裁剪图片的时候,如果太靠近画布边缘会自动贴边,该怎么设置让他不贴边

更改 UINavigationBar 的分隔符颜色