NavigationBar不可见

时间:2015-08-28 18:22:50

标签: ios objective-c uiwebview uinavigationbar

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

会发生什么:当我运行应用程序时,唯一可见的是webview(全屏),但导航栏不在那里。

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

它看起来像什么

enter image description here

.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

问题/问题:导航栏不可见,如何解决这个问题,以便webview和导航栏都可见?

6 个答案:

答案 0 :(得分:3)

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

  1. 创建单页面应用

  2. 在视图加载

  3. 的情况下替换已加载的视图

    以下是您的代码使用导航栏和代码以及导航栏的结果,如您所说:

    您可以在此处下载此项目:http://www18.zippyshare.com/v/DXi9wySi/file.html

    扩展布局(您的结果相同):

    enter image description here

    故事板布局:

    enter image description here

    因此,鉴于上面的截图并且导航栏位于我们的Web视图后面,部分原因是我没有导航控制器来控制我的视图控制器所以放置一个导航栏完全没用,并且不会显示在屏幕上。此外,如果导航栏确实显示,导航栏甚至不会执行任何操作,因为层次结构中没有导航控制器。

    现在,鉴于第一个例子,这里有一个修正。

    这与上面的布局相同,但不同之处在于我已经将导航控制器中的视图控制器生根了......一切都保持不变,事实上,我甚至没有添加导航bar to storyboard,因为这是由导航控制器的视图控制器的生根自动生成的。

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

    扩展布局:

    enter image description here

    故事板布局:

    enter image description here

    所以,这里的不同之处还在于我在导航控制器中生成了视图控制器。

    <强>结论:

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

答案 1 :(得分:2)

0行代码解决方案

UIWebview中的Storyboard创建:导航控制器的布局,约束,导航栏,标题,引用插座,代表,所有这些。在资源级别实现的每一点设置都将删除代码行,潜在的错误,测试,令人头疼和沮丧。

enter image description here

整个班级

@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 &amp;的的OBJ-C

►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

ViewController2实际上是UINavigationController还是已将UINavigationBar置于Storyboard的视图中?

如果您刚刚将UINavigationBar拖到Storyboard的视图中,然后在viewDidLoad方法中添加UIWebView(带有框架的UIView完整ViewController2的{​​{1}},当然,您将看不到UINavigationBar,因为UIWebView正在涵盖{。}}。

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

编辑:(可能)无关的问题:

Storyboard中,您已经放置了UIWebView,我猜您正在连接IBOutlet webView2

为什么要在UIWebView代码中实例化-another- viewDidLoad?你已经有一个,只能参考它而不是创建一个新的,似乎没有理由。

答案 4 :(得分:1)

简短而简单:

  1. 您最有可能使用模拟指标在故事板中显示导航栏视图。模拟的metics部分参数仅用于检查界面在具有不同分辨率的不同设备上的外观。它们对运行时视图没有直接影响。
  2. enter image description here

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

答案 5 :(得分:0)

对于那些没有上述工作的人,我刚刚发现了另一个可能导致导航栏无法显示的问题。如果您已经添加了导航控制器并且导航栏没有显示,那么如果您有类似的设置,这可能适用于您。我有一个登录vC,然后通过导航控制器链接到新闻源。如果在属性检查器中将新闻源设置为“是初始视图控制器”,则导航栏将不会显示。但是,如果您通过登录页面(即登录)访问新闻源,因此您将通过导航控制器进行路由,然后将显示导航栏。这意味着如果要显示导航栏,请不要使用“是初始视图控制器”。