在应用程序内打开 pdf 会破坏设计



我在一件事上遇到了某种问题,我正在制作一个应用程序,我有一个显示pdf文件的webview,我有一个按钮,如果点击将调用UIDocumentInteractionController(在新窗口中打开pdf)。

我将留下屏幕截图以使其更容易:

当我打开应用程序时:

https://i.stack.imgur.com/kzFKN.jpg

打开 UIDocumentInteractionController 后:

https://i.stack.imgur.com/UyBea.jpg

这也是代码

.h 文件

@interface pdfView : UIViewController <UIDocumentInteractionControllerDelegate>
{
    IBOutlet UIActivityIndicatorView *loading;
    IBOutlet UIWebView *Wview;
    UIDocumentInteractionController *controller;
}
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *loading;
@property (nonatomic, retain) IBOutlet UIWebView *Wview;
@property (nonatomic, retain) UIDocumentInteractionController *controller;
-(void)buttonPressed;
-(IBAction)open_in:(id)sender;
-(IBAction)back:(id)sender;
@end

.m 文件

#import "pdfView.h"

@implementation pdfView
@synthesize loading,Wview;
@synthesize controller;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}
- (void)viewDidLoad
{
    [loading startAnimating];
    [super viewDidLoad];
    Wview.scalesPageToFit = TRUE;
    Wview.multipleTouchEnabled = TRUE;
    [Wview setOpaque:NO];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"guia_seguranca_2" ofType:@"pdf"];
    NSURL *targetURL = [NSURL fileURLWithPath:path];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [Wview loadRequest:request];
    [loading stopAnimating];
}
-(IBAction)open_in:(id)sender
{
    NSString *fileToOpen = [[NSBundle mainBundle] pathForResource:@"guia_seguranca_2" ofType:@"pdf"];
    UIDocumentInteractionController* preview = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:fileToOpen]];
    preview.delegate = self;
    [preview presentPreviewAnimated:YES];
    [preview retain]; 
}
-(IBAction)back:(id)sender
{
    [self.view removeFromSuperview]; 
}
-(void)buttonPressed
{
    //[self.view removeFromSuperview];
    NSString *fileToOpen = [[NSBundle mainBundle] pathForResource:@"guia_seguranca_2" ofType:@"pdf"];
    UIDocumentInteractionController* preview = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:fileToOpen]];
    preview.delegate = self;
    [preview presentPreviewAnimated:YES];
    [preview retain]; 
 }
- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
{
    return self;
}
- (UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller
{
    return self.view;
}
- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller
{
    return self.view.frame;
}
- (void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller
{
    [self.controller autorelease];
}
- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc. that aren't in use.
}
- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
- (void)dealloc
{
    [super dealloc];
    [Wview release];
    [loading release];
}
@end

提前感谢.....

我建议不要使用webview并使用像这样的pdf应用程序(ibook,cloudreader)。

//name of pdf
NSString * pathString = @"userguide";
//get pdf path
NSString * filePath = [[NSBundle mainBundle] pathForResource:pathString ofType:@"pdf"];
NSURL *url = [NSURL fileURLWithPath:filePath];
self.docController = [UIDocumentInteractionController interactionControllerWithURL:url];
BOOL isValid = [self.docController presentOpenInMenuFromRect:self.handBookLaunch.frame inView:self.view  animated:YES];
if (!isValid) {
    NSString * messageString = [NSString stringWithFormat:@"No PDF reader was found on your device. Please download a PDF reader (eg. iBooks)."];
    UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:messageString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];

已解决,添加了以下代码进行布局验证:

-(void) viewWillAppear:(BOOL)animated
    {
    CGRect arect=[[UIScreen mainScreen]applicationFrame];
    CGRect anotherrect=[[UIApplication sharedApplication]statusBarFrame];
    if(self.view.center.y==arect.size.height/2)
    self.view.center=CGPointMake(self.view.center.x, self.view.center.y+anotherrect.size.height); // fix silliness in IB that makes view start 20 pixels higher than it should on iPhone
    }

来源: https://discussions.apple.com/thread/2658315?start=0&tstart=0

最新更新