当我第一次加载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];
}
以上代码无法解决问题。
答案 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