/ / UIScrollview размера на съдържанието при промяна на ориентацията - цел-c, ios, uiscrollview, uiinterfaceorientation, contentize

Размер на съдържанието на UIScrollview при промяна на ориентацията - цел-c, ios, uiscrollview, uiinterfaceorientation, contentize

Имам преглед на превъртането с странициране. В viewDidLoad проверявам дали текущата ориентация е ландшафтна, след това задам itsize размер 440

 if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
[scroll      setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages,340)];


}
else if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation]))

{
[scroll setFrame:CGRectMake(0,0,480,480)];
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 440)];


}

всичко работи добре scrollview свитъци гладка и няма диагонал превъртане.

но когато ориентацията се промени,

аз трябва да настроите scrollview "и рамката и contentize отново и аз съм го настройка, както следва

-(void)orientationChanged:(id)object
{
if(UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
self.scroll.frame = [[UIScreen mainScreen]bounds];

[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 340)];
}


else
{
self.scroll.frame = CGRectMake(0,0,480,480);
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 600)];
}


}

Не мога да разбера защо трябва да задам съдържаниеразмер на височина до 600 в пейзажен режим, и това too not enough.и добавя още един проблем, който scrollview започва да превъртате диагонално, което аз не искам, тъй като изглежда толкова странно.Може ли някой да ми помогне да разберем къде и какво съм липсва?

Имам зададена маска за автоматично оразмеряване на scrollview като

[scroll setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleHeight];

но смяната му не помага.

Отговори:

2 за отговор № 1

Тук това е проблем във вашия код. Защо настройвате размера на кадъра така? Имате само размера на екрана 320px width, И когато се промени landscape, височината ще бъде само 320px, Но настройвате свитъка height като 480px и то goes out of the screen и start to scroll diagonally.

self.scroll.frame = CGRectMake(0,0,480,480);

Вместо този размер на рамката, променете по този начин

self.scroll.frame = CGRectMake(0,0,480,320);

И трябва да настроите размер на съдържанието зависи от съдържание вие имате в рамките на превъртете изгледа в ориентация.


5 за отговор № 2
  1. Не използвайте UIDeviceOrientation, употреба UIInterfaceOrientation вместо. DeviceOrientation има две допълнителни опции, от които не се нуждаете тук. (UIDeviceOrientationFaceUp и UIDeviceOrientationFaceDown)

  2. връщане Yes от shouldAutorotateToInterfaceOrientation

  3. Сега willRotateToInterfaceOrientation: duration: ще се извиква всеки път, когато завъртите устройството си.

  4. Изпълнете този метод по този начин.

    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    {
    CGRect frame;
    int pageNumber = 2;
    int statusBarHeight = 20;
    
    if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) {
    frame = CGRectMake(0, 0, 480, 320 - statusBarHeight);
    } else {
    frame = CGRectMake(0, 0, 320, 480 - statusBarHeight);
    }
    
    scrollView.frame = frame;
    scrollView.contentSize = CGSizeMake(frame.size.width * 2, frame.size.height);
    }
    

    Позволявам,

    pageNumber = 2

    statusBarHeight = 20