【问题标题】:UIWebview full screen sizeUIWebview全屏尺寸
【发布时间】:2013-08-31 20:17:51
【问题描述】:

我正在尝试使用设备的整个屏幕在 UIWebview 中显示 pdf,但状态栏和顶部栏除外。到目前为止,我在我的 .h 文件中创建了IBOutlet UIWebview *webview;。我在我的故事板中连接了 webview,并在我的 .m 文件中编写了以下代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];

    webview.scalesPageToFit = YES;
    webview.autoresizesSubviews = YES;
    webview.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
    [webview setBackgroundColor:[UIColor clearColor]];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Chart" ofType:@"pdf"];
    NSURL *targetURL = [NSURL fileURLWithPath:path];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [webview loadRequest:request];

    [self.view addSubview:webview];

}

pdf 在我的 3.5 英寸显示器中正确显示,但在我的 4 英寸显示器中,底部被切断。当我旋转到横向视图时,这一点更加明显。大约 33% 的屏幕根本没有使用。我怎样才能解决这个问题?我知道它一定与我上面代码中的 UIWebview 尺寸有关 (webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];),但是有没有更好的方法来简单地在整个屏幕上显示 webview,而不指定特定的屏幕高度和宽度?

【问题讨论】:

    标签: ios xcode uiwebview


    【解决方案1】:

    一个便宜的做法是设置 webview 的框架覆盖 - (void)viewDidLayoutSubviews

    - (void)viewDidLayoutSubviews {
        webView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    }
    

    在这里做的好处是,这里已经确定了视图的大小和方向,可以得到准确的测量结果。

    【讨论】:

    • 我添加了这段代码,但是有一个错误:“Assigning to 'CGRect' (aka 'struct CGRect') from in compatible type 'int'...
    • 我刚刚做了 - (void)viewDidLoad { [super viewDidLoad]; webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];现在它可以工作了!谢谢!
    • 如果有人想知道,它起作用的原因是因为您将 CGRectmake 更正为 CGRectMake,而不是因为它已更改为 initWithFrame。
    • 编辑了我的答案,以防其他人看到它。
    • 谢谢,伙计!我一直在寻找这个解决方案 2 天,并且做得很好。谢谢!
    【解决方案2】:

    使用自动布局

    确保未选中“约束到边距”选项,所有约束值均为 0:

    您的 webview 是您的主视图的第一个子视图:

    没有自动布局

    更改 webview 自动调整连接:

    【讨论】:

      【解决方案3】:

      在处理iOS6、7和不同屏幕尺寸的兼容性问题后,我使用了这个:

      - (void)viewDidLoad {
         [super viewDidLoad];
      
         self.webview = [[UIWebView alloc] init];
         // More setting your webview here
      
         // Set webview to full screen
         self.view = self.webview;
      
         [self.webview loadRequest:aRequest]; 
      }
      

      【讨论】:

      • 在替换控制器的view属性时,可以通过在loadView方法中赋值self.view来防止它被创建。
      【解决方案4】:

      通过选择Resolve Auto Layout Issues 菜单下的Reset to Suggested Constraints,我能够正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        相关资源
        最近更新 更多