Ios 创建UIViewController';以编程方式使用子视图创建

Ios 创建UIViewController';以编程方式使用子视图创建,ios,objective-c,uiwebview,Ios,Objective C,Uiwebview,我想创建一个以编程方式将UIWebView作为子视图的控制器。我通过以下代码实现了这一点: VLUpdateViewController.h @interface VLUpdateViewController : UIViewController @property (nonatomic, strong) UIWebView* webView; @end VLUpdateViewController.m @implementation VLUpdateViewController - (

我想创建一个以编程方式将UIWebView作为子视图的控制器。我通过以下代码实现了这一点:

VLUpdateViewController.h

@interface VLUpdateViewController : UIViewController

@property (nonatomic, strong) UIWebView* webView;

@end
VLUpdateViewController.m

@implementation VLUpdateViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor blueColor]];
    [self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
    self.webView = [[UIWebView alloc] initWithFrame:self.view.frame];
    [self.webView setBackgroundColor:[UIColor redColor]];
    [self.webView setScalesPageToFit:YES];
    [self.view addSubview:self.webView];

    NSArray* constraints = [[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[webView]-0-|" options:0 metrics:nil views:@{@"webView" : self.webView}] arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[webView]-0-|" options:0 metrics:nil views:@{@"webView" : self.webView}]];

    [self.view addConstraints:constraints];
}
但是,我的问题是,当方向改变时,webView无法正确调整大小。事实上,它根本不会调整大小。它只是在屏幕的中央旋转

肖像:

景观:

我试图省略
设置TranslatesAutoResizengMaskintoConstraints:
,但当我将方向更改为横向时,得到了以下结果


我复制并粘贴了您的代码,并添加了缺少的行:

self.webView.translatesAutoresizingMaskIntoConstraints = NO;
您在self.view中使用了translatesAutoresizingMaskIntoConstraints=NO,但在self.webView中没有

最终代码:
使用Autolayout最简单的方法是..不编写多行代码,这将使工作做得非常完美

添加砌体框架(最好是pod)并导入类。 并使用以下代码: //下一行指出webview在任何状态下都应该具有与superview相同的大小

[self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(superview);
}];
如果你想要一些填充物:

UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);

    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(superview.mas_top).with.offset(padding.top); 
        make.left.equalTo(superview.mas_left).with.offset(padding.left);
        make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
        make.right.equalTo(superview.mas_right).with.offset(-padding.right);
    }];

瞧。。这太多了。

当方向改变时,您需要更新UIWebview的框架。还有更新约束。当我在故事板上做这件事时没有问题,而且这个问题的正确答案对我来说并不适用。@Yogeshuthar我怎么能这样做?@halileohalilei检查你们为什么把它标记为重复?你看过提议的答案了吗?这不是这个问题的答案!这是一个程序的方法。当我这样做时,我只得到一个黑屏,网页没有加载。那么其他的干扰,这是你粘贴的真实代码吗?看起来您正在使用自定义视图控制器,可能视图控制器的视图没有立即加载。在这种情况下,请尝试将约束设置和网页加载延迟到视图出现之后。看看这是否有帮助。我正在从另一个UIVIewController创建此控制器,并使用
presentViewController:animated:completion:
以模式显示它。这可能是问题所在吗?
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);

    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(superview.mas_top).with.offset(padding.top); 
        make.left.equalTo(superview.mas_left).with.offset(padding.left);
        make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
        make.right.equalTo(superview.mas_right).with.offset(-padding.right);
    }];