在目标c中旋转设备后如何更新Web视图宽度?

时间:2018-09-30 07:40:02

标签: ios webview

当我第一次加载Web视图时,它的框架是正确的,但是当我旋转设备时,它的宽度没有更新。
例如,如果视图是纵向视图,而我横向旋转视图,则Web视图框架不会覆盖整个视图。

加载网络视图

-(void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self loadWebView];
}

-(void) loadWebView {
    UIWebView *webView;

    webView = [[UIWebView alloc] initWithFrame: self.view.frame];

    NSString *htmlString = [NSString stringWithFormat:@"%@%@%@",html_header_with_files,DetailsHtml,HTML_FOOTER];

    [webView loadHTMLString:htmlString baseURL:nil];
    [self.view addSubview:webView];
}

第一次尝试: 我添加了一个通知以实现轮换

- (void) orientationChanged:(NSNotification *)note
{
    [self.view layoutIfNeeded];
}

以上代码无法解决问题。


第二次尝试

- (void) orientationChanged:(NSNotification *)note
{
    [self loadWebView];
}

以上代码无法解决问题。

1 个答案:

答案 0 :(得分:1)

必须使用自动布局添加视图,以使其在所有两个方向的设备中都能正确布局。

您需要创建UIView扩展,并添加以下方法以使其可重用。如果您不想在其他任何地方使用此方法,也可以在同一个类中添加该方法。

- (void)addSubView:(UIView *)subView belowView:(UIView *)belowView inSuperView:(UIView *)superView {
        [superView addSubview:subView];

        [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0]];
        [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0]];
        [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];
        if (nil == belowView) {
            [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
        } else {
            [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:belowView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];
        }
    }

然后您需要调用上述方法

[self addSubView:webView belowView:nil inSuperView:self.view];

注意:

要了解有关自动布局的更多信息,可以按照教程进行操作

https://www.raywenderlich.com/443-auto-layout-tutorial-in-ios-11-getting-started

即使您的某些代码库已经在Objective-C中,最好还是开始快速编写应用程序而不是继续Objective-C。在下面的链接中可以找到使obj-c和快速互操作性的教程

https://medium.com/ios-os-x-development/swift-and-objective-c-interoperability-2add8e6d6887