【问题标题】:ViewController view starts with at ~(0,20)ViewController 视图从 ~(0,20) 开始
【发布时间】:2011-07-29 08:57:35
【问题描述】:

我尝试过启动基于视图的应用程序和基于窗口的应用程序,但我仍然遇到同样的问题。 当我添加一个导航栏时,它看起来像是从绳子〜(0,20)开始,并在它和“系统托盘”之间留出一些空间(我找不到带有时钟和电池等的扩展坞的词)

我无法弄清楚为什么会发生这种情况,因为 frame 的 nslog 告诉我它起源于 (0,0)(奇怪的是宽度是 0 :/ 但它清晰可见)。

代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, 
                                                                       self.view.frame.origin.y+48.0f, 
                                                                       self.view.frame.size.width, 
                                                                       self.view.frame.size.height)];
        [image setImage:[UIImage imageNamed:@"IMG_0792.PNG"]];
        [self.view addSubview:image];

        self.navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, 
                                                                    self.view.frame.origin.y, 
                                                                    self.view.frame.size.width, 
                                                                    45.0f)];

        [navBar setDelegate:self];    
        [navBar pushNavigationItem: [[UINavigationItem alloc] initWithTitle:@"Image Stream"] animated:NO];
        [self.view addSubview:navBar];
    }
    return self;
}

我只是在 appdelegate 中声明它,retain-property 和:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.menu = [[MenuViewController alloc] initWithNibName:nil bundle:nil];
    [self.window setRootViewController:menu];
    [self.window makeKeyAndVisible];
    return YES;
}

如果有人知道为什么会这样,那就太好了。谢谢

【问题讨论】:

    标签: objective-c ios uiviewcontroller uinavigationbar


    【解决方案1】:

    当使用超级视图的坐标定位视图时,使用边界,而不是框架。如果有状态栏,您的 superview.frame.x 将非零,但子视图的坐标是相对于父视图,而不是位置。

    【讨论】:

      【解决方案2】:

      检查以下内容:

      • 如果有状态栏,请在您的UIViewController's Xib 中。如果是,则输入无。 (您可以在检查器中设置,只需选择您的根UIView

      • 您是否通过 XIB 将您的 UIViewController 添加到您的应用程序委托中?如果是,请检查应用程序的委托 xib 您的 UIViewController 并查看它是否有状态栏。

      ps:它叫状态栏。

      编辑您用于 UINavigation 的框架怎么样? 45.0f。

      【讨论】:

      • 我没有用于 VC 的 XIB,正如你所见,我没有用一个来启动它:[[MenuViewController alloc] initWithNibName:nil bundle:nil]; 和 appdelegate xib 我猜你的意思是 MainWindow.xib(?)这个有状态栏,但它并没有帮助删除它。任何其他建议。我在开始一个新项目时遇到了这种行为,只是添加了一个视图控制器,所以我看不到我做错了什么。
      • 45.0f 只是导航栏的高度,这就是我在打印框架时得到的结果:导航栏框架:x:0 y:0 宽度:0 高度:1077149696(它正是imageview 和 self.view 也一样)
      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      相关资源
      最近更新 更多