ios中的doc,pdf等附件的查看与下载问题

情境:最近再做一个项目,使用的是cordova+dojo mobile做的ios app,其中遇到doc, pdf等的附件查看与下载,实在不知道该怎么处理。

遇到的问题:不论是直接给个服务器地址还是把文件以流的方式输出到前台,文档都可以打开,在这里也只能感叹一下Safari的强大了,chrome貌似暂时还不具备有打开PDF的功能。但是问题也来了,ios上没有返回按钮,用户打开文档之后,文档显示了,但是用户退不出去了,用户只能通过双击home键来把app kill掉,然后重新进入,这在用户体验上,简直是场噩梦!感叹Safari强大的通知不得不吐槽一下apple的扯淡了!网上查了下,Safari还不支持文档的下载,真扯啊!造成这么大的麻烦!

顺便在吐槽一句:cordova的资料也太少了,真心不好找啊!

我的解决办法:

    问题暂时分两类:(1)文档的下载

                                     (2)文档的查看

    问题(1)文档的下载,考虑使用cordova中的file API,然后把文件下载到应用程序的sandbox中,但是考虑到如果下载到sandbox中,用户通过我们的app来打开文件或者预览应该问题不大,如果用户没有通过我们的程序,是不是就找不到那个文件呢?暂时没有好的解决办法,可能是跟ios的机制有关吧。希望有看到的兄弟姐妹们给个好的建议,这里谢了!


    问题(2)文档的查看,这里基本实现了文档的在线查看,主要使用的是cordova的 inAppBrowser api,相当于一个在线预览文件的这么一个功能,暂时没有更好的解决办法。同样的,希望有这方面经验的兄弟姐妹们不吝赐教。


以下主要是关于问题(2)文档的查看的解决办法:

使用cordova的inAppbrowser来打开文档,如下图所示:

ps:“返回”这个按钮是我设置的,默认的是“Done”。

注意到左下角的返回按钮,再发想这个api的时候真让我兴奋,要知道当时这个问题困扰我了好久,曾将想过各种办法来解决用户浏览文件的问题,但都没能成功。

有了这个“返回”按钮,文件基本上得到解决,能够实现用户在线预览文档的功能。

本以为问题差不多解决了,还没高兴多久,问题又来了。

通过inAppBrowser这个API是可以打开文档,但是,文档显示的时候与状态栏重叠,而且点击“返回”按钮之后,我的视图高度变了,视图与状态栏重叠了,这个问题又是场噩梦,让用户怎么忍受!?

又是一天黑暗的摸索,终于问题有有了转机,我查了cordova的object-c的实现,在项目的cordovaLib.xcodeproj下,

其中classes文件夹下的commands文件夹下,找到了CDVWebViewDelegate.h和CDVWebViewDelegate.m文件,我又一次兴奋了。

这样一来,我不就可以直接改cordova的实现了,然后不用再受cordova API的摆不了么?然后我试着改了它的一个东西,果然有效果。就是这里了!先改了再说,把功能实现再说,实现的合不合理以后再说。

这里我说一下为什么要关注CDVWebViewDelegate这个文件吧,我现在的认识是:cordova是通过UIWebView来显示这个app的页面的,所以重点就是查看apple的API,看看怎么设置UIWebView的高度,让它向下挪个20px。

查了apple的API,了解到它的delegate中有个- (void)webViewDidFinishLoad:(UIWebView*)webView方法,这里好像可以设置它的高度,

所以我在这里添加了webView.frame =  CGRectMake(0,20, webView.frame.size.width, webView.frame.size.height-20);这么一行代码 ,然后就是见证奇迹的时刻了!新打开的页面乖乖的跑到下面去了,终于给状态栏挪了挪位置!

到此问题基本解决。


总结:修改InAppBrowser的高度(同时修改整个项目中的UIWebView高度)

(1)。修改info-plist中的View Controller-based status bar appearance为YES;//暂时不知道默认的是什么,我是写上了

(2)。在AppDelegate中的- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions方法中添加以下代码:  

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        UIApplication *myApp = [UIApplication sharedApplication];
        [myApp setStatusBarStyle: UIStatusBarStyleLightContent];
    }

//暂时也不知道是不是必须的一条语句,同样的我是写上了。

(3)。在cordovaLib.xcodeproj-->class-->commands中的CDVWebViewDelegate.m文件下的- (void)webViewDidFinishLoad:(UIWebView*)webView方法中添加一条语句:

webView.frame =  CGRectMake(0,20, webView.frame.size.width, webView.frame.size.height-20); //让UIWebView向下移20px,腾出位置给状态栏,使视图和状态栏不重叠。


最后的话:由于不太了解ios,以上解决办法也是我自己搞了好久才整出来的,可能并不是最优的办法,如果有更好的办法,希望朋友可以不吝赐教,感激不尽!


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值