为啥只有当我覆盖它时,我的 UINavigtionController 栏才会在 iOS 7 上错误地定位? [复制]

Posted

技术标签:

【中文标题】为啥只有当我覆盖它时,我的 UINavigtionController 栏才会在 iOS 7 上错误地定位? [复制]【英文标题】:Why is my UINavigtionController bar getting incorrectly positioned on iOS 7 only when I override it? [duplicate]为什么只有当我覆盖它时,我的 UINavigtionController 栏才会在 iOS 7 上错误地定位? [复制] 【发布时间】:2014-02-20 21:02:51 【问题描述】:

注意:这个问题似乎是在模态视图被关闭后出现的。

我将我的UINavigationController 子类化以使其在包含导航的视图上时无法旋转。这是代码的样子......非常简单。我只是将 Interface Builder 中的 UINavigationController 类设置为 NavViewController

#import "NavViewController.h"

@interface NavViewController ()

@end

@implementation NavViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationPortrait;


- (BOOL)shouldAutorotate

    return NO;


@end

问题是,当我从模态视图返回时,这会导致我的顶部栏位置混乱。例如,这是我导航到视图时的样子(仅供参考:顶部状态栏上的黑色已内置到导航栏的背景图像中):

然后在带有导航栏的视图控制器上,我调用此代码从相册中获取图片:

- (IBAction)goToPhotoAlbum

    UIImagePickerController *mypicker = [[UIImagePickerController alloc] init];
    mypicker.delegate = self;
    mypicker.allowsEditing = NO;
    mypicker.wantsFullScreenLayout = YES;
    mypicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:mypicker animated:YES completion:nil];

然后我将其关闭:

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

    [self dismissViewControllerAnimated:YES completion:nil];

当视图重新出现时,导航栏现在看起来像这样:

当我从我的 Nav 子类中注释掉以下代码时,就像这样,一切似乎再次正常工作,并且栏的位置正确:

/*
    - (NSUInteger)supportedInterfaceOrientations
    
        return UIInterfaceOrientationPortrait;
    

    - (BOOL)shouldAutorotate
    
        return NO;
    
*/

任何人都知道这里发生了什么以及我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

回答我自己的问题:

这实际上是Navigation bar overlapped by status bar的副本

解决方法是将子类中的代码更改为:

- (NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationMaskPortrait;


- (BOOL)shouldAutorotate

    return YES;

【讨论】:

以上是关于为啥只有当我覆盖它时,我的 UINavigtionController 栏才会在 iOS 7 上错误地定位? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

引导模式未显示,屏幕只有黑色覆盖

当我递归调用它时,为啥我的函数返回以前的值而不是新的值?

当我在括号中调用它时,Thymeleaf 不会解析我的应用程序中的片段。这是为啥?

为啥当我使用 column1 = 'ABCD' 过滤它时,我的一个视图的工作速度要慢 4 倍 [关闭]

为啥当我将我的国际象棋项目作为可运行的 jar 文件运行时,我得到一个奇怪的行为,而当我在 eclipse 中运行它时,一切正常?

为啥我的 for 循环覆盖而不是追加?