Как обновить ширину веб-вида после поворота устройства в объективе c? - PullRequest
0 голосов
/ 30 сентября 2018

Когда я впервые загружаю веб-представление, его рамка верна, но когда я поворачиваю устройство, его ширина не обновляется.Например, если вид был портретным, и я поворачиваю его в альбомной ориентации, рамка веб-вида не охватывает весь вид.

Загрузка веб-вида

-(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 голосов
/ 30 сентября 2018

Вид должен быть добавлен с автоматической разметкой, чтобы он правильно выкладывался на всех устройствах с обеими ориентациями.

Вам необходимо создать расширение 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

Также лучше начать писать свое приложение с помощью swiftвместо продолжения target-c, даже если часть вашей кодовой базы уже находится в target-c.Учебное пособие по настройке совместимости obj-c и swift можно увидеть по ссылке ниже

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...