2017-01-31 7 views
0

Я просто хочу, чтобы WKWebView привязывался ко всем сторонам self.view, так что он всегда будет растягиваться, насколько это возможно, независимо от поворота. Используя следующий код, он заполнит вид на то, что начальное вращение, но после поворота, он просто все исчезает:WKWebView Constraints не работает

-(void)viewWillAppear:(BOOL)animated { 
    [super viewDidLoad]; 
    self.title = @"Worship Slides"; 

    self.productURL = @"http://www.316apps.com/Fritch/worship.key"; 

    NSURL *url = [NSURL URLWithString:self.productURL]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]; 

    _theWorship = [[WKWebView alloc] initWithFrame:self.view.frame]; 
    [_theWorship setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [_theWorship loadRequest:request]; 
    _theWorship.frame = CGRectMake(0, 0, self.navigationController.view.bounds.size.width, self.navigationController.view.bounds.size.height); 
    [self.view addSubview:_theWorship]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:_theWorship attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.bottomLayoutGuide attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:_theWorship attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:_theWorship attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:_theWorship attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]]; 
} 
+1

Не вызывайте 'super viewDidLoad' в' viewWillAppear'. Вам нужно вызвать 'super viewWillAppear'! В противном случае ваш код выглядит нормально (за исключением того, что два параметра «frame» бессмысленны и их следует удалить, но они не навредят). Вы уверены, что веб-представление исчезает? Сделайте поворот, затем используйте View Debugger, чтобы увидеть, где находится веб-представление. – matt

+0

У вас есть опечатка [super viewDidLoad] - действительно, это должно быть правильно, и эта функция должна быть '-viewDidLoad' –

+0

@matt он не должен делать это в viewWillAppear - это должно быть сделано в viewDidLoad. –

ответ

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

Изменить на:

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

Также убедитесь, что вы добавьте метод проверки, был ли ваш код уже вызван, иначе он будет вызван несколько раз/каждый раз, когда появится представление. Вместо этого вы должны скорее называть его методом viewDidLoad, но вы можете выбрать все, если вы не назовете его несколько раз.

Кроме того, после добавления все, что вы можете позвонить:

[_theWorship layoutIfNeeded]; 
0

Избавьтесь от addConstraint и вызвать IsActive = истина вместо этого. Обратитесь к документации:

When developing for iOS 8.0 or later, set the constraint’s active property to true instead of calling the addConstraint(_:) method directly. The isActive property automatically adds and removes the constraint from the correct view.

NSLayoutAnchor В качестве альтернативы использовать; его не так долго, как NSLayoutConstraint. Я использую NSLayoutConstraint в цикле или когда я не могу выразить ограничение с NSLayoutAnchor (т. Е. Размножаться по центру).