导航栏不可见

NavigationBar is not visible

说明:我有一个 viewcontroller,其中包含一个 NavigationBar 和一个 UIWebView。 .m 文件中将 webview 设置为全屏。在viewcontroller上,导航栏被安排在前面。

发生了什么: 当我 运行 应用程序时,唯一可见的是网络视图(全屏),但导航栏不存在。

假设会发生什么:这是不言自明的,但导航栏应该位于顶部,webview 在其下方。

长什么样子

.m 文件

#import "SecondViewController.h"

@interface ViewController2 ()

@end

@implementation ViewController2

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
      UIWebView *webview2=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0,  self.view.frame.size.width,self.view.frame.size.height)];
    NSString *url2=@"http://bithumor.co/server/trending/index1.php";
    NSURL *nsurl2=[NSURL URLWithString:url2];

    NSURLRequest *nsrequest2=[NSURLRequest requestWithURL:nsurl2];

    [webview2 loadRequest:nsrequest2];

    webview2.scrollView.bounces = NO;

    [self.view addSubview:webview2];

@end

.h文件

#import <UIKit/UIKit.h>


@interface ViewController2 : UIViewController

@end

Issue/Question: 导航栏不可见,如何解决才能让 webview 和导航栏都可见?

ViewController2 是否实际上在 UINavigationController 中,或者 UINavigationBar 是否已放入 Storyboard 的视图中?

如果您刚刚将 UINavigationBar 拖到 Storyboard 的视图中,然后在 viewDidLoad 方法中添加 UIWebView(带有框架ViewController2 的完整 UIView),那么你当然不会看到 UINavigationBar,因为它被 UIWebView.

覆盖了

如果 ViewController2 实际上在 UINavigationController 中,那么我将需要更多详细信息才能找到问题。

编辑:一个(可能)不相关的问题:

在您的 Storyboard 中,您已经放置了一个 UIWebView,我猜您正在连接到 webView2IBOutlet

为什么要在 viewDidLoad 代码中实例化 -another- UIWebView?您已经有了一个,可以直接引用它,而不是无缘无故地创建一个新的。

所以,我可以复制您可能遇到的情况,并且我已经完成了两个项目,以便您可以看到它们。这是一些屏幕截图,但首先我使用的代码是您的代码:

  1. 创建单页应用程序

  2. 将已加载的视图替换为您已加载的视图

以下是将您的代码与您的代码和导航栏一起使用的结果:

您可以在这里下载这个项目:http://www18.zippyshare.com/v/DXi9wySi/file.html

扩展布局(你得到的结果相同):

故事板布局:

因此,考虑到上面的屏幕截图和放置在 we web 视图后面的导航栏,部分原因是我没有保存我的视图控制器的导航控制器,因此放置了导航栏完全没用,不会显示在屏幕上。此外,导航栏即使出现也不会做任何事情,因为层次结构中没有导航控制器。

现在,针对第一个示例,这里有一个更正。

这与上面的布局相同,但不同之处在于我将视图控制器植根于导航控制器中..一切都保持不变,事实上,我什至没有添加导航栏情节提要,因为这是由导航控制器的视图控制器的生根自动生成的。

您可以下载这个项目:http://www41.zippyshare.com/v/aXRlAT3a/file.html

扩展布局:

故事板布局:

因此,这里的不同之处再次在于,我将视图控制器置于导航控制器中。

结论:

很可能您遇到的问题与我上面解释的问题完全不同,但是使用您的代码,我能够获得与您在第一个示例中相同的结果.在我的第二个例子中,我能够使用一个网络视图,就像你用你的代码显示的那样,事实上我在第二个例子中有一个导航栏。我在第二个示例中唯一更改的是将视图控制器置于导航控制器中。

0 行代码解决方案

Storyboard 中创建 UIWebview:布局、约束、导航控制器的导航栏、标题、引用插座、委托,所有这些。在资源级别实施的每一点设置都将删除代码行、潜在错误、测试、头痛和挫败感。

整个Class

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *url2=@"https://google.com";
    NSURL *nsurl2=[NSURL URLWithString:url2];
    NSURLRequest *nsrequest2=[NSURLRequest requestWithURL:nsurl2];
    self.webView.scrollView.bounces = NO;
    [self.webView loadRequest:nsrequest2];
}

@end

该解决方案与语言无关,并且在 Swift & Obj-C.

► 在 GitHub and additional details on Swift Recipes 上找到此解决方案。

简短:

  1. 很可能您正在使用模拟指标在情节提要中显示导航栏视图。模拟 metics 部分参数仅用于检查您的界面在具有不同分辨率的不同设备上的外观。它们对运行时视图没有直接影响。

  1. 为了使您的视图控制器在顶部(视图控制器)有一个导航栏视图,在一般情况下它应该有一个 UINavigationController 作为父级 VC(如@SwiftArchitect 所示)。

调试您的视图并检查您的根视图控制器是否是导航控制器。 还要检查 self.navigationController == nil

对于上面 none 所服务的那些人,我刚刚发现了另一个可能导致导航栏不显示的问题。如果您已经添加了一个导航控制器并且导航栏没有显示,那么如果您有与我类似的设置,那么这可能适用于您。我有一个登录 vC,然后通过导航控制器链接到新闻提要。如果您在属性检查器中将新闻提要设置为 Is Initial View Controller,则导航栏将不会显示。但是,如果您通过登录页面(即登录)到达新闻提要,并且因此您被导航控制器路由到那里,那么导航栏将显示。这意味着如果你想显示导航栏,不要使用"Is Initial View Controller"。