8

我已将我的项目从 iOS 6 升级到 iOS 7,但似乎有点问题。状态栏和工具栏相互覆盖并且非常接近。工具栏之前是通过在情节提要中手动拖动来添加的。这是它的显示方式:

工具栏

我已经看到一些建议使用“positionForBar:”和“- (UIBarPosition)positionForBar:(id)bar”的问题,但我不知道如何使用它们,一点解释和简单的方法可能会帮助。谢谢!

更新:以下是一些也需要修复的代码。它之前工作正常,但由于 detailviewcontroller (WebViewController) 现在嵌入在导航控制器中,下面的代码导致异常。看起来我需要修改这个方法的第一行。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

        WebViewController *wvc = [self.navigationController.parentViewController childViewControllers][1];
        RSSItem *entry = [[channel items] objectAtIndex:[indexPath row]];
        wvc.title = entry.title;
        wvc.urlString = entry.link;   
}
4

6 回答 6

6
_toolBar.delegate = self;

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar {
    CGRect frame = _toolBar.frame;
    frame.origin = CGPointMake(0, [UIApplication sharedApplication].statusBarFrame.size.height);
    _toolBar.frame = frame;

    return UIBarPositionTopAttached;
}

纵向条

景观栏

于 2013-09-21T20:32:33.747 回答
4

您的视图的顶部约束不应再是超级视图的顶部空间,而是顶部空间顶部布局指南。

您可以通过将顶部空间向下移动到状态栏下方,然后使用约束菜单将约束添加到最近的邻居,这现在应该是顶部布局指南,或者您可以按照苹果的此链接中的说明进行操作开发者库

于 2013-09-25T14:38:38.147 回答
3

请记住,您不应该仅仅出于两个原因将 IB 中的内容向下移动:

  1. 与 iOS 6 不兼容
  2. 不会在状态栏下扩展顶栏背景效果

什么不能做...

因此,如果您想要 iOS6 和 iOS7 兼容性,您可以为需要在ViewDidLoad. 需要注意的是这是最后一种情况 - 始终尝试首先使用自动布局/ IB 来解决它:

#import <Availability.h>

#ifdef __IPHONE_7_0

        CGRect barFrame = topBar.frame;
        barFrame.origin = CGPointMake(0, [UIApplication sharedApplication].statusBarFrame.size.height);
        [topBar setFrame:barFrame];

        // move other stuff around too

    #endif

并像上面的 Luniz 一样设置你的酒吧代表,覆盖positionForBar到 .

topBar.delegate = self;

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

    return UIBarPositionTopAttached;
}
于 2013-09-23T21:08:46.967 回答
2

如果您的设置是一个拆分视图,例如具有两个容器视图的设置,您应该能够做到这一点。设置容器视图时,向上拖动顶部,直到看到指示顶部位于状态栏底部的蓝色虚线。对两个容器视图执行此操作。将工具栏添加到嵌入式控制器(不是容器视图),固定在该控制器视图的顶部。将左视图嵌入导航控制器后,我的屏幕如下所示:

在此处输入图像描述

于 2013-09-22T00:16:07.960 回答
1

我试图做几乎相同的事情,但我不喜欢接受答案的白色状态栏。我设法将工具栏放置在状态栏下方,以便它与主视图中旁边的导航栏具有一致的颜色。

我的解决方案是将工具栏设置为 64 点高并将 Topspace 设置为 superview 为 0。

执行此操作时,您必须确保您没有创建顶部空间布局指南的约束。通过将 Frame 设置为 0,0,高度为 64,我能够在 Interface Builder 中完成此操作。然后我使用浮动工具菜单中的 Pin 对话框。我在顶部 I 梁上使用零来创建约束。

底边在 Master 和 Detail 中匹配,并且颜色一致。我工具栏中的控件最终变得不拥挤。

于 2013-09-29T07:46:27.090 回答
-1

斯威夫特 3

连接你的 bar 代表并遵守 UIToolbarDelegate。然后添加这个委托方法:

func position(for bar: UIBarPositioning) -> UIBarPosition {
    return UIBarPosition.topAttached
}

因为现在

enum UIBarPosition : Int {
    case any
    case bottom
    case top
    case topAttached
}
于 2014-08-07T11:27:11.500 回答