Добавление ограничения автоматического размещения программно превращает UIView в черный цвет.

Мне нужен контроллер представления без XIB. Должен быть веб-просмотр с полностью заполненным видом. Для этого я добавил следующий код в метод loadView.

- (void)loadView {
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
    UIView *view = [[UIView alloc] initWithFrame:applicationFrame];

    view.translatesAutoresizingMaskIntoConstraints = NO;
    [view setBackgroundColor:[UIColor greenColor]];
    [self setView:view];
//    //create webview
    self.webview = [[UIWebView alloc] initWithFrame:CGRectZero];
    self.webview.translatesAutoresizingMaskIntoConstraints = NO;
    [view addSubview:self.webview];
    [self.webview setBackgroundColor:[UIColor orangeColor]];
    [self.webview setDelegate:self];

    NSDictionary *viewBindings = NSDictionaryOfVariableBindings(view,_webview);
//    //add constraints
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_webview]|" options:0 metrics:nil views:viewBindings]];
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_webview]|" options:0 metrics:nil views:viewBindings]];

}

Но это превращает весь вид в черный. Если я комментирую [view addConstraints:... метод вызывает его, показывая зеленый вид. Что не так с моим кодом?

2 ответа

Решение

Я считаю, что проблема заключается в том, что родительское представление не должно устанавливать translatesAutoresizingMaskIntoConstraints ложно. Единственное представление, которое должно установить для этого атрибута значение false, - это то, к которому вы применяете автоматическое расположение, в данном случае webView. Если вы установите view.translatesAutoresizingMaskIntoConstraints в ложь, то вы должны добавить ограничения view,

Вам не нужно менять корневой вид UIViewController вручную, может быть поэтому он не работает.

Мое предложение будет попробовать это:

- (void) viewDidLoad {
    [super viewDidLoad];

    self.webview = [[UIWebView alloc] init];
    self.webview.translatesAutoresizingMaskIntoConstraints = NO;
    [view addSubview:self.webview];
    [self.webview setBackgroundColor:[UIColor orangeColor]];
    [self.webview setDelegate:self];

    NSDictionary *viewBindings = NSDictionaryOfVariableBindings(view,_webview);
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_webview]-0-|" options:0 metrics:nil views:viewBindings]];
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_webview]-0-|" options:0 metrics:nil views:viewBindings]];
    // put a breakpoint after this line to see the frame of your UIWebView. 
    // It should be the same as the view
    [self.view layoutIfNeeded];
}

Это должно работать и ваш UIWebView должно быть на весь экран. Удачи!

Другие вопросы по тегам