【问题标题】:Not sure why UIView is being nudged up by around 10px不知道为什么 UIView 被推高了大约 10px
【发布时间】:2010-11-06 11:22:37
【问题描述】:

我创建了一个简单的 iPhone 应用程序,它有两个 .xib 文件。在应用程序代表完成启动时,我通过调用显示第一个 .xib 文件:

[window addSubview:myView];

我在 IBAction 上为 UIButton 执行相同操作以将视图更改为 myView2。

我发现,当我运行应用程序时,两个视图都有一个大约 10 像素的白条。我还注意到按钮偏移了 10 个像素(大约)。所以我得到的印象是视图是从屏幕外 10 像素处显示出来的,并且结束得很短。

知道为什么会发生这种情况,如何修复它,或者如何进一步调试正在发生的事情?我检查了我的 .xib 文件,它们占用了设备的整个高度(即没有白条),所以这看起来是 XCode 内部的一个问题。

编辑:我已经缩小了问题的范围。我正在使用两种方法来加载子视图。当我在applicationDidFinishLaunching 中加载第一个视图时,一切都很好。但是,如果我用[self originalView] 方法替换window 的两条消息,那么一切都会变得有点混乱。

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    //[self originalView];  <- I want to use this instead of the following two lines

    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

}

-(void)endView{
    endV = [[EndViewController alloc] initWithNibName:@"EndView" bundle:nil];
    [window removeFromSuperview];
    [window addSubview:endV.view];  
}
-(void)originalView{
    viewController = [[MyAppViewController alloc] init];
    [window removeFromSuperview];
    [window addSubview:viewController.view];

}

据我所知,我总是调用相同的代码行,无论它是在 applicationDidFinishLaunching 还是在 [self originalView] 中,但似乎 window 变成了一个不同的对象。

【问题讨论】:

    标签: iphone xcode uiview window xib


    【解决方案1】:

    当以正常方式(即pushing it on a UINavigationController)使用 UIViewController 时,它会调整其视图的框架。

    由于您是手动添加子视图,因此您必须自己调整框架。原点在右上角(在状态栏的顶部)。您想将视图向下移动 20 像素。

    【讨论】:

    • 我见过的所有示例都使用 UINavigationController 来显示列表的层次结构,这只是它的用途吗?或者我可以使用它来控制显示哪些视图,即使它们不需要 NavigationBar 等?
    【解决方案2】:

    这是我的解决方案:

    // adjust the frame of subview which is going to be add
    self.navController.view.frame = CGRectMake(0, 0, 320, 460);
    [self.view addSubView:self.navController.view];
    

    现在对我来说很好用,祝你好运~:)

    【讨论】:

      【解决方案3】:

      在界面生成器中,您可以添加将以编程方式显示的模拟界面元素(例如状态栏或导航栏)。在您的检查器中,选择您的视图,然后转到“属性”选项卡。在这里您可以模拟状态栏、顶栏或底栏。

      【讨论】:

        【解决方案4】:

        看起来你在错误的地方调用 pushVC 到这个 UIViewController。我有同样的问题。通过将 [self.navigationController pushViewController: animated:]viewDidLoad 移动到 viewDidAppear: 在层次结构中的先前 UIViewController 中解决了这个问题。

        【讨论】:

          【解决方案5】:

          每当出现奇怪的间隙,或者视图部分隐藏在状态栏后面时,它都与两者有关

          1. 应该在你的根控制器中自动旋转定义 - 不确定它是否是一个错误,但尽量与所有子视图控制器的该函数的返回保持一致(通常导致视图控制器隐藏在状态栏后面)
          2. 一个想要的子视图的全屏定义 - 如果可能,设置为 NO

          我的应用程序中有两个错误并已解决!希望我可以为您节省一些时间(我浪费了很多时间)

          【讨论】:

            猜你喜欢
            • 2011-07-14
            • 2015-07-08
            • 2016-12-13
            • 2010-10-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多