почему текст обрезается при смене ориентации - PullRequest
0 голосов
/ 21 января 2012

Я использую веб-представление для отображения содержимого HTML и использую некоторые методы для ориентации, но когда я впервые изменяю альбомную ориентацию формы на портретную, текст выходит из представления. И когда я прокручиваю из портретной в другуюстраница, которая показывает мне отлично. Может быть, это происходит из-за ширины от пейзажа до портрета.

Код и метод, который я использую ниже:

Установка размера страницы

- (void)setPageSize:(NSString *)orientation {
NSLog(@"• Set size for orientation: %@", orientation);

pageWidth = screenBounds.size.width;
pageHeight = screenBounds.size.height;
if ([orientation isEqualToString:@"landscape"]) {
    pageWidth = screenBounds.size.height;
    pageHeight = screenBounds.size.width;
}

}

для ориентации

- (NSString *)getCurrentInterfaceOrientation {
if ([availableOrientation isEqualToString:@"portrait"] || [availableOrientation isEqualToString:@"landscape"])
{
    return availableOrientation;
} 
else {
    // WARNING!!! Seems like checking [[UIDevice currentDevice] orientation] against "UIInterfaceOrientationPortrait" is broken (return FALSE with the device in portrait orientation)
    // Safe solution: always check if the device is in landscape orientation, if FALSE then it's in portrait.
    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
        return @"landscape";
    } else {
        return @"portrait";
    }
}

}

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
if ([availableOrientation isEqualToString:@"portrait"]) {
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
} else if ([availableOrientation isEqualToString:@"landscape"]) {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
} else {
    return YES;
}   

}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
// Notify the index view
[indexViewController willRotate];

// Since the UIWebView doesn't handle orientationchange events correctly we have to do handle them ourselves 
// 1. Set the correct value for window.orientation property
NSString *jsOrientationGetter;
switch (toInterfaceOrientation) {
    case UIDeviceOrientationPortrait:
        jsOrientationGetter = @"window.__defineGetter__('orientation', function() { return 0; });";
        break;
    case UIDeviceOrientationLandscapeLeft:
        jsOrientationGetter = @"window.__defineGetter__('orientation', function() { return 90; });";
        break;
    case UIDeviceOrientationLandscapeRight:
        jsOrientationGetter = @"window.__defineGetter__('orientation', function() { return -90; });";
        break;
    case UIDeviceOrientationPortraitUpsideDown:
        jsOrientationGetter = @"window.__defineGetter__('orientation', function() { return 180; });";
        break;
    default:
        break;
}

// 2. Create and dispatch a orientationchange event    
NSString *jsOrientationChange = @"if (typeof bakerOrientationChangeEvent === 'undefined') {\
                                      var bakerOrientationChangeEvent = document.createEvent('Events');\
                                          bakerOrientationChangeEvent.initEvent('orientationchange', true, false);\
                                  }; window.dispatchEvent(bakerOrientationChangeEvent)";

// 3. Merge the scripts and load them on the current UIWebView
NSString *jsCommand = [jsOrientationGetter stringByAppendingString:jsOrientationChange];
[currPage stringByEvaluatingJavaScriptFromString:jsCommand];

}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[indexViewController rotateFromOrientation:fromInterfaceOrientation toOrientation:self.interfaceOrientation];

[self setPageSize:[self getCurrentInterfaceOrientation]];
[self getPageHeight];    
[self resetScrollView];

Пожалуйста, помогите мне. Где я могу пойти не так?

1 Ответ

0 голосов
/ 14 сентября 2012

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

...