导航栏不可见
Posted
技术标签:
【中文标题】导航栏不可见【英文标题】:NavigationBar is not visible 【发布时间】:2015-08-28 18:22:50 【问题描述】:说明: 我有一个包含 NavigationBar 和 UIWebView 的视图控制器。 webview 在 .m 文件中设置为全屏。在 viewcontroller 上,导航栏排在最前面。
会发生什么:当我运行应用程序时,唯一可见的是 web 视图(全屏),但导航栏不存在。
假设会发生什么:这是不言自明的,但导航栏应该位于顶部,而 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
问题/问题:,如何解决这个问题,让 webview 和导航栏都可见?
【问题讨论】:
你能给我们看看故事板吗? @T_77 编辑了我的问题 还向我们展示视图层次结构 i.stack.imgur.com/vlrQp.png - 前面是 web 视图 只需将 webview2 连接到它在情节提要中的插座,然后使用 self.webview2 loadrequest 【参考方案1】:所以,我可以复制您可能遇到的情况,并且我已经完成了两个项目,以便您可以看到它们。这是一些屏幕截图,但首先我使用的代码是您的代码:
创建单页应用程序
将已加载的视图替换为已加载的视图
以下是使用带有导航栏的代码和您所说的导航栏的结果:
你可以在这里下载这个项目:http://www18.zippyshare.com/v/DXi9wySi/file.html
扩展布局(与您的结果相同):
故事板布局:
所以,鉴于上面的截图和导航栏被放置在 we web 视图后面,部分原因是我没有一个导航控制器来保存我的视图控制器,所以导航栏的放置完全没用,不会出现在屏幕上。此外,由于层次结构中没有导航控制器,导航栏即使出现也不会做任何事情。
现在,鉴于第一个示例,这里有一个更正。
这与上面的布局相同,但不同之处在于我将视图控制器植根于导航控制器中......一切都保持不变,事实上,我什至没有在情节提要中添加导航栏因为这是由导航控制器的视图控制器的生根自动生成的。
你可以下载这个项目:http://www41.zippyshare.com/v/aXRlAT3a/file.html
扩展布局:
故事板布局:
所以,这里的区别再次是我将视图控制器植根于导航控制器中。
结论:
很可能您遇到的问题与我上面解释的问题完全不同,但是使用您的代码,我能够获得与您在第一个示例中相同的结果。在我的第二个示例中,我能够使用 Web 视图,正如您在代码中显示的那样,实际上我在第二个示例中确实有一个导航栏。我在第二个示例中唯一更改的是将视图控制器植根于导航控制器中。
【讨论】:
那么我必须为每个视图控制器都这样做吗? @PHPWebDev101 如果您需要帮助了解这如何与多个视图控制器一起工作,请告诉我,我可以创建一个连接多个视图控制器的新项目 干得好@Larcerax,以及在 IB 中使用 Storyboard 和 Autolayout 的道具。【参考方案2】:调试你的视图并检查你的根视图控制器是否是导航控制器。 还要检查 self.navigationController == nil
【讨论】:
【参考方案3】:0行代码解决方案
在Storyboard
中创建UIWebview
:布局、约束、来自Navigation Controller 的导航栏、标题、引用出口、委托,所有这些。在资源级别实施的每一点设置都将消除代码行、潜在错误、测试、头痛和挫败感。
整个班级
@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 上查找此解决方案,在Swift Recipes 上查找更多详细信息。
【讨论】:
【参考方案4】:ViewController2
实际上是在 UINavigationController
中还是 UINavigationBar
被放置在 Storyboard
中的视图中?
如果您刚刚将UINavigationBar
拖到Storyboard
中的视图中,然后在viewDidLoad
方法中添加UIWebView
(带有@987654330 的完整UIView
的框架@),那么你当然不会看到UINavigationBar
,因为它被UIWebView
覆盖了。
如果ViewController2
实际上在UINavigationController
中,那么我需要更多详细信息才能找到问题。
编辑:一个(可能)不相关的问题:
在您的Storyboard
中,您已经放置了一个UIWebView
,我猜您正在连接到webView2
的IBOutlet
。
为什么要在 viewDidLoad
代码中实例化 -another- UIWebView
?您已经有了一个,可以直接引用它,而不是无缘无故地创建一个新的。
【讨论】:
视图控制器 2 不在 UINavigationController 中。 UINavigationBar 被放置在 viewcontroller 中。 我确定这就是让 webview 覆盖屏幕的原因。 如果您注释掉以下行,您是否仍然看到UINavigationBar
被覆盖? [self.view addSubview:webview2];
否,但现在 web 视图未加载和/或不可见
顺便说一句,我取出了 webview 的 iboutlet(在注释掉 self.view 之前),它仍然加载了网页【参考方案5】:
简短:
-
您很可能正在使用模拟指标在情节提要中显示导航栏视图。模拟 metics 部分参数仅用于检查您的界面在具有不同分辨率的不同设备上的外观。它们对运行时视图没有直接影响。
-
为了让您的视图控制器在顶部有一个导航栏视图(视图控制器),一般情况下它应该有一个 UINavigationController 作为父 VC(如 @SwiftArchitect 所示)。
【讨论】:
【参考方案6】:对于以上所有方法都不起作用的人,我刚刚发现了另一个可能导致导航栏不显示的问题。如果您已经添加了导航控制器并且导航栏未显示,那么如果您有与我类似的设置,这可能适用于您。我有一个登录 vC,然后通过导航控制器链接到新闻提要。如果您在属性检查器中将新闻提要设置为 Is Initial View Controller,则导航栏将不会显示。但是,如果您通过登录页面(即登录)到达新闻提要,因此导航控制器将您路由到那里,那么导航栏将显示。这意味着如果要显示导航栏,请不要使用“Is Initial View Controller”。
【讨论】:
以上是关于导航栏不可见的主要内容,如果未能解决你的问题,请参考以下文章