2

我的应用程序中有一个 UIWebView,但无法使其与横向和视口缩放同时正常工作。

如果我以纵向加载页面然后旋转手机,使用自动调整大小,它可以正常工作,放大设置为缩放的页面。但是,如果我在横向模式下启动 webview,我必须旋转到纵向,然后再旋转回横向才能正确缩放。移动 Safari 没有这个问题。

例如,如果您从横向模式开始在 web 视图中加载 mobile.washingtonpost.com,则文本很小。如果您旋转到纵向,然后再回到横向,则文本会更大(应该如此)。移动 safari 足够智能,可以在横向加载文本时立即使文本变大。我要那个 :)

我有一个解决方法,但它完全是一个黑客,我想知道是否有更好的方法。基本上,我可以让风景有正确的缩放,但只有在通过将 webivew 的帧大小旋转到 320 宽然后回到 480 宽来加载它之后。这让我到了那里,但是:A)看起来很傻,B)在页面加载之前我不能这样做,所以你会看到字体调整大小。

下面你可以看到一个非常简单的应用程序的代码。通过将其添加到 info.plist 将初始方向设置为横向,在模拟器中使用它是最简单的: UIInterfaceOrientation UIInterfaceOrientationLandscapeRight

这是代码:

// webviewAppDelegate.m

#import "webviewAppDelegate.h"

@implementation webviewAppDelegate

@synthesize window;

UIWebView *wv;

-(void) doWebView {
wv = [[UIWebView alloc] init];
wv.frame = CGRectMake(0,0,480,300);

[self.view addSubview:wv];

NSURLRequest *r = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://mobile.washingtonpost.com"]];
wv.delegate = self;
[wv loadRequest:r];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {

// HACK
wv.frame = CGRectMake(0,0,320,300);
wv.frame = CGRectMake(0,0,480,300);
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {   

    // Override point for customization after application launch
    [window makeKeyAndVisible];

UIView *blank = [[UIView alloc] init];
self.view = blank;
[window addSubview:self.view];

NSTimer *t = [NSTimer timerWithTimeInterval : 2.0target: selfselector: @selector(doWebView) userInfo:nil repeats: NO];
[[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

returnYES;
}

- (void)dealloc {
    [window release];
    [super dealloc];
}


@end

--------------------------------------------------------

//  webviewAppDelegate.h

#import <UIKit/UIKit.h>

@interface webviewAppDelegate : UIViewController <UIApplicationDelegate, UIWebViewDelegate> {
    UIWindow *window;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end
4

0 回答 0